awk 合并两个文件

时间:2021-04-11 10:10:11

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中。