awk可以使用自身变量NR和FNR来处理多个文件。
NR:表示awk开始执行程序后所读取的数据行数。
FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。
#下面语句用于合并两个文件,对于第1列相同的那些行,输出第一个文件和第二个文件
awk 'NR==FNR{a[$1]=$0;next} {if($1 in a)print $1FSa[$1]FS$2}' file1 fiel2
#下面语句用于合并两个csv文件,第一列相同的行合并输出,第一列不同的分别输出
awk -F',' 'ARGIND==1{file1[$1]=$0;next} \
ARGIND==2{if($1 in file1) {print file1[$1]FS$2; same_item[$1]=$0;} else print $1",,"$2} \
ARGIND==3{if(!($1 in same_item)) print $1FS$2","}' new_QD.csv old_QD.csv new_QD.csv
#下面语句,将第二个文件SH11开头的行,在最后增加一列,值为第一个文件里面的第7列(在第一个文件找不到的话值为100)
awk -F',' 'NR==FNR{if($1~/SH11/) {a[$1]=$7;} next;} {if($1~/SH11/) {if($1 in a) print $0","a[$1]; else print $0","100;} else print $0;} file1.csv file2.csv