已知文件1.txt和2.txt
cat 1.txt
1 a 2 a 3 a 4 b 5 c 6 c 7 d
cat 2.txt
a 10 b 20 c 30 d 40
要求:通过awk将以上两个文件合并成如下效果
1 a 10 2 a 10 3 a 10 4 b 20 5 c 30 6 c 30 7 d 40
解答:
awk 'NR==FNR{m[$1]=$2}NR>FNR{print $0,m[$2]}' 2.txt 1.txt
知识点:
NR为awk命令读取记录的数目
FNR为awk命令读取当前文件的记录的数目
在此例中,awk首先读取的是2.txt文件,然后读取的是1.txt文件,在awk命令读取完2.txt最后一条记录时,NR=FNR,都等于4,当awk命令开始读取1.txt的第一条记录时,NR=5,而FNR=1。这就是NR和FNR的区别。
解释:
m[$1]=$2是把第一个文件(2.txt)的第二列复制给以第一列为key的数组,当NR>FNR时,awk命令读到了第二个文件(1.txt),要取出数组m的值,就要找到相应的key值,key值对应第二个文件的第二列,就是m[$2]。
转载于:https://blog.51cto.com/147546/1741140