• awk 命令使用入门


    Linux 下处理和分析文本文件内容,AWK 命令是一个强有力的工具。特别是文件内容是以行和列的形式排版的时候,AWK 就是命令行界的 Excel 啊!
    简单的 awk 命令可以直接在命令行中使用,复杂情况下就得写 awk 脚本来解决了。
    awk 命令基本用法:
    awk 'pattern {action}' input-file > output-file
    这个命令的简单解释就是:遍历输入文件 input-file 内容的每一行,在符合模式 pattern 的行上执行动作 action,并将执行结果写入 output-file 文件。
    如果省略了 pattern 模式的话,每一行都将执行动作 action。例如:
    awk '{ print $5 }' table1.txt > output1.txt
    这句命令的意思就是输出文件 table1.txt 每行内容的第五列到文件 output1.txt。默认情况下,每列以空格符或者 tab 符(也叫做空白符)分割。因此,如果文件 table1.txt 内容是这样的话:

    1, Justin Timberlake, Title 545, Price $7.30
    2, Taylor Swift, Title 723, Price $7.90
    3, Mick Jagger, Title 610, Price $7.90
    4, Lady Gaga, Title 118, Price $7.30
    5, Johnny Cash, Title 482, Price $6.50
    6, Elvis Presley, Title 335, Price $7.30
    7, John Lennon, Title 271, Price $7.90
    8, Michael Jackson, Title 373, Price $5.50
    

    那么,运行该命令后文件 output1.txt 的内容便如下:

    545,
    723,
    610,
    118,
    482,
    335,
    271,
    373,
    

    如果分隔符不是空格符或者 tab 符的话,你可以在命令中指定它:
    awk -F, '{ print $3 }' table1.txt > output1.txt
    该条命令就会选择文件 table1.txt 内容的每行的第三列输出到文件 output1.txt 中,其中每列的分隔符为逗号。所以,文件 output1.txt 的内容便是这样了:

     Title 545
     Title 723
     Title 610
     Title 118
     Title 482
     Title 335
     Title 271
     Title 373
    

    在花括号中间的内容即(print $3)叫做代码区。如果在代码区前面放一个条件表达式的话,代码区的代码只会在条件表达式成立时执行:
    awk '$7=="$7.30" { print $3 }' table1.txt > output1.txt
    这条命令的意思就是,只有某行第七列等于 $7.30 时,才会将该行第三列内容输出到文件 output1.txt 中。$7.30 前的反斜杠是为了阻止系统将其解释为变量 $7,加上反斜杠后其仅仅被解释为普通字符串。该命令输出如下:

    Timberlake,
    Gaga,
    Presley,
    

    我们也可以把一个正则表达式当做条件表达式。例如:
    awk '/30/ { print $3 }' table1.txt > output1.txt
    在两个反斜杠之间的内容便是正则表达式。也就是说,只有某行包含字符串“30”时,才会将该行的第三列输出到文件 output1.txt 中。其输出如下:

    Timberlake,
    Gaga,
    Presley,
    

    如果文件内容某列全数字的话也可以使用它们进行计算:
    awk '{ print ($2 * $3) + $7 }' table1.txt
    现在第一列我们使用 $1,第二列使用 $2,那么有没有 $0 呢?当然是有的啦,$0 就表示一个完整的行内容,还有变量 NF 就表示每行的列数呢!所以所有文件 table1.txt 每行每列都是数字的话,我们可以这样进行每行累加求和:
    awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }' table1.txt
    当然了,说起 awk 我们不用忘了它的好兄弟 sed 命令,那么下次就来说说 sed 命令吧!

    参考

    https://www.lifewire.com/write-awk-commands-and-scripts-2200573
    http://man.linuxde.net/awk

  • 相关阅读:
    oracle 聚合函数 LISTAGG ,将多行结果合并成一行
    oracle 数据库对于多列求最大值
    Java 简单的rpc 一
    centos7 安装php7
    win10下VM 中centos 安装共享文件
    CentOS7 cannot find a valid baseurl for repo base
    分布式事务
    利用虚拟映射文件加密大文件
    动态代理
    c++ 11 lambda表达式
  • 原文地址:https://www.cnblogs.com/optor/p/8232934.html
Copyright © 2020-2023  润新知