awk 合并两个文件

NR,表示awk开始执行程序后所读取的数据行数.

FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.

对于单个文件NR 和FNR 的 输出结果一样的 :

$ cat fil1
st cid name
1 111 wy
2 222 xlx
3 333 ww
4 444 yyy


$ cat file2
cid status
111 a
222 b
333 c

合并fil1和file2,合并后的效果如file3:

]$ cat file3
st cid name status
1 111 wy a
2 222 xlx b
3 333 ww c



$ awk 'NR==FNR{a[$2]=$0;next}NR>FNR{if($1 in a)print a[$1],$2}' fil1 file2>file3

注释:

当NR==FNR为真时,判断当前读入的是第一个文件,然后使用{a[$2]=$0;next}循环将第一个文件的每行记录都存入数组a,并使用$2第2个字段cid作为下标引用.

由NR>FNR为假时,判断当前读入了第二个文件,然后判断第二个文件的第一个字段cid是否在数组a中,如果在的话执行{print a[$1],$2},打印出数组a和第二个文件的第二个字段此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件第二个字段$2 status。最后将经过输出到file3中。


  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值