Skip to main content

如何编写AWK命令和脚本

11 2 3 Shell编程 字符截取命令 awk命令 (六月 2025)

11 2 3 Shell编程 字符截取命令 awk命令 (六月 2025)
Anonim

awk命令是处理或分析文本文件的强大方法 - 特别是由行(行)和列组织的数据文件。

简单 AWK 命令可以从命令行运行。更复杂的任务应该作为awk程序(所谓的awk脚本)写入文件。

awk命令的基本格式如下所示:

awk'pattern {action}'输入文件>输出文件

这意味着:取输入文件的每一行;如果该行包含该模式,则将该操作应用于该行并将结果行写入输出文件。如果省略该模式,则该操作将应用于所有行。例如:

awk'{print $ 5}'table1.txt> output1.txt

此语句采用每行第5列的元素,并将其作为一行写入输出文件“output.txt”中。变量'$ 4'指的是第二列。类似地,您可以使用$ 1,$ 2,$ 3等访问第一列,第二列和第三列。默认情况下,假定列由空格或制表符(所谓的空格)分隔。因此,如果输入文件“table1.txt”包含以下行:

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

然后该命令将以下行写入输出文件“output1.txt”:

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

如果列分隔符不是空格或制表符(例如逗号),则可以在awk语句中指定,如下所示:

awk -F,'{print $ 3}'table1.txt> output1.txt

如果认为列被逗号分隔,这将从每行的第3列中选择元素。因此,在这种情况下,输出将是:

标题545 标题723 标题610 标题118 标题482 标题335 标题271 标题373

大括号内的语句列表('{','}')称为块。如果将条件表达式放在块前面,则只有条件为真时才会执行块内的语句。

awk'$ 7 ==“ $ 7.30”{print $ 3}'table1.txt

在这种情况下,条件是$ 7 ==“ $ 7.30”,这意味着第7列的元素等于$ 7.30。美元符号前面的反斜杠用于阻止系统将$ 7解释为变量,而是从字面上理解美元符号。

所以这个awk语句打印出每行第3列的元素,第7列的“$ 7.30”。

您还可以使用正则表达式作为条件。例如:

awk'/ 30 / {print $ 3}'table1.txt

两个斜杠('/')之间的字符串是正则表达式。在这种情况下,它只是字符串“30”。这意味着如果一行包含字符串“30”,系统将在该行的第3列打印出该元素。上例中的输出为:

汀布莱克, 加加, 普雷斯利,

如果表元素是数字,awk可以在它们上运行计算,如下例所示:

awk'{print($ 2 * $ 3)+ $ 7}'

除了访问当前行($ 1,$ 2等)元素的变量外,还有变量$ 0表示完整行(行),变量NF表示字段数。

您还可以在此示例中定义新变量:

awk'{sum = 0; for(col = 1; col <= NF; col ++)sum + = $ col;打印总和; }”

这将计算并打印每行所有元素的总和。

awk语句经常与sed命令结合使用。