如何编写AWK命令和脚本

命令,语法和示例

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,标题545,售价$ 7.30 2,Taylor Swift,标题723,售价$ 7.90 3,Mick Jagger,标题610,售价7.90美元4,Lady Gaga,标题118,售价$ 7.30 5,Johnny Cash,标题482,售价$ 6.50 6,Elvis Presley,标题335,售价$ 7.30 7,John Lennon,标题271,售价$ 7.90 8,Michael Jackson,标题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语句在第7列的每行“$ 7.30”的第3列处打印出元素。

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

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

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

Timberlake,Gaga,Presley,

如果表格元素是数字,awk可以对它们进行计算,如下例所示:

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

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

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

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

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

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