awk 读入两个文件并把两个文件合并-文件合并

awk 读入两个文件并把两个文件合并-文件合并

在awk里,NR和FNR的含义相近,唯一的区别就是作用范围,NR是所有读取的行信息计数,而FNR是正在读取文件的行信息计数,FNR在文件切换时会从0重新开始计数,所以上述语句的意思是:

NR==FNR在判断是不是在读a.txt,如果是a.txt则以第一个数据项为key,以整行信息为数据组成数组;

NR>FNR则判断是不是在读b.txt,因为此时NR=(a.txt的总行数+FNR),如果是,则判断第一个数据项在不在a.txt数据组成的数组里,如果在,则打印本行加数组项。

例子:

o@t /tmp $ cat a.txt

1 abc

2 def

3 ghi

4 jlm

o@t /tmp $ cat b.txt

3 shit

1 rubb

o@t /tmp $ awk 'NR==FNR{a[$1]=$0;next}NR>FNR{if($1 in a)print $0"\n"a[$1]}' a.txt b.txt

3 shit

3 ghi

1 rubb

1 abc

推荐阅读