论坛   云专线   awk命令和脚本的编写启蒙
返回云专线
发新帖 回复
查看: 19|回复: 0

awk命令和脚本的编写启蒙

[复制链接]
楼主

196

主题

196

帖子

386

积分

中级会员

Rank: 3Rank: 3

积分
386
发表于 2021-10-13 15:30:39 | 显示全部楼层 |阅读模式
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$catlinuxmi.txt599,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$catlinuxmi.txtTitle599Title761Title880Title198Title582Title370Title571Title673Title585
大括号内的语句列表('{''}')称为块。 如果将条件表达式放在块前面,则只有条件为真时才会执行块内的语句。
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.txtcom,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;printsum;}'linuxidc.com.txt
这将计算并打印每行所有元素的总和。
awk语句经常与sed命令结合使用。
凭借SD-WAN2.0灵活而统一的服务交付功能,电信公司可以通过提供按需、可编程增值服务和连接功能的形式,创造新的业务/收入机会。业务从服务部署、资源分配和成本开发的灵活性中获益。

返回云专线
发新帖 回复
广告