a.txt内容如下:
a 150
b 200
c 100
b.txt内容如下:
abcd a 12.5
bbbb b 35
cccc c 42
dddd d 21
想要通过a.txt、b.txt得到ba.txt
abcd a 12.5 150
bbbb b 35 200
cccc c 42 100
dddd d 21
用awk简单搞定awk 'NR==FNR{map[$1]=$2;next}{print $0,map[$2]}' a.txt b.txt > ba.txt
解释:
NR:读入的记录总数;FNR:当前文件的读入记录数(行数)
读a.txt时,NR=FNR,都是3行,此时将a的第二个域得内容赋值到map中,其中key为第一个域的值,因为b的第二个域跟a的第一个域是一样的值,赋值完后,直接next不进行后面的{}里面的输出。
当a读取完后,读取b时,NR==FNR不成立,所以执行第二个{}里的打印,因此得出结果。
shell功能就是强大啊~~~