awk多文件处理

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功能就是强大啊~~~

猜你喜欢

转载自skydove.iteye.com/blog/845960