日常积累------awk脚本

有必要将最近的一些技术整理整理,今天的主要整理目标:awk脚本

awk 命令的名称来源于三位作者的首字母,awk命令主要用逐行扫描处理文本文件,并且能够一次读取多个文件。

1.举一个简单的例子:

awk -F '\t' '{print $1,$2,$NF}' a.txt

awk 脚本每次读取a.txt文件中的一行,每一行按照回车符'\t'分割,$1对应分割后字符串数组的第一个字段,$2对应第二个,$NF对应当前行的最后一个字段。

print 表示将这三个字段打印出来(默认间隔为空格,可以设置)。

2.设置输出字段间隔符号:

awk -F '\t' 'BEGIN{OFS="\t"}{print $1,$2}' a.txt
awk 脚本内部有一些常用变量,OFS变量存储输出字段的间隔符号,$0表示当前整行。

3.两个文件取交集

awk -F '\t' 'NR==FNR{a[$1]=$0}NR>FNR{if($1 in a){print}}' a.txt b.txt > c.txt

上面的命令实现了两个文件按照第一列取交集,NR变量存储截止到目前awk脚本读取的行数,FNR对应当前文件的行数,第一个判断式处理第一个文件,并且以第一个文件的首列作为键存储进入数组a,第二个表达式处理第二个文件,大括号里面判断第二个文件的第一列字段是否在数组a当中,如果在则输出。

文件a.txt,b.txt取差集(b-a)

awk -F '\t' 'NR==FNR{a[$1]=$0}NR>FNR{if(!($1 in a)){print}}' a.txt b.txt > c.txt
文件a.txt,b.txt取并集

awk -F '\t' 'NR==FNR{a[$1]=$0;print}NR>FNR{if(!($1 in a)){print }}' a.txt b.txt > c.txt

4.使用shell变量

awk -F '\t' 'print "'$x'"' a.txt
采用双引号套单引号+$符号

5.调用系统命令

awk -F '\t' '{cmd = "./a.exe" $2}; cmd | getline x;print x} a.txt
a.exe是一个工具需要传递参数,awk脚本中将第二个字段的变量传给a, cmd保存命令字符串。cmd | getline x 运行命令并将结果保存在x当中。

6.正则表达式使用内部变量

awk -F '\t' 'NR==FNR{a[$1] = $0} NR>FNR{flag = 1; for(x in a){if($1 ~ x){flag = 0; break}}if(flag == 1){print }}' dict.txt a.txt > c.txt

x 为内部变量如果使用其作为正则匹配项,直接调用即可。该命令实现了在a.txt中的第一列字段中过滤字典中的关键字。

7.内部命令

awk -F '\t' '{lens = split($1,a,"\\$")}{for (i in a){print i}}' a.txt

将每一行的第一个字段再按照$符号切分,并且打印所有符号。








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值