<返回更多

如何编写awk命令和脚本

2019-12-19    
加入收藏

awk的命令是一种处理或分析文本文件的强大方法,特别是按行和列组织的数据文件。

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

awk命令的基本格式如下:

awk 'pattern {action}' input-file > output-file

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

linuxidc@ubuntu:~/linuxidc.com$ awk '{ print $5 }' linuxidc.txt > linuxmi.txt

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

1, linuxidc com, Title 599, Price $9.30

2, ninhao linuxidc, Title 761, Price $5.90

3, naike xie, Title 880, Price $9.10

4, Lady Gaga, Title 198, Price $1.30

5, Johnny Cash, Title 582, Price $6.50

6, Elvis Presley, Title 370, Price $9.30

7, John Lennon, Title 571, Price $8.90

8, Michael Jackson, Title 673, Price $7.50

9, linuxidc com, Title 585, Price $1.80

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

linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt

599,

761,

880,

198,

582,

370,

571,

673,

585,

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

linuxidc@ubuntu:~/linuxidc.com$ awk -F, '{ print $3 }' linuxidc.txt > linuxmi.txt

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

linuxidc@ubuntu:~/linuxidc.com$ cat linuxmi.txt

Title 599

Title 761

Title 880

Title 198

Title 582

Title 370

Title 571

Title 673

Title 585

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

awk '$7=="$7.30" { print $3 }' linuxidc.txt

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

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

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

linuxidc@ubuntu:~/linuxidc.com$ awk '$7=="$7.30" { print $3 }' linuxidc.txt

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

linuxidc@ubuntu:~/linuxidc.com$ awk '/30/ { print $3 }' linuxidc.txt

com,

Gaga,

Presley,

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

linuxidc@ubuntu:~/linuxidc.com$ awk '{ print ($2 * $3) + $7 }' linuxidc.com.txt

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

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

linuxidc@ubuntu:~/linuxidc.com$ awk '{ sum=0; for (col=1; col<=NF; col++) sum += $col; print sum; }' linuxidc.com.txt

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

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

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>