cat file1
a b c d
aa bb cc dd
cat file2
1 2 3 4 5 6 7
11 22 33 44 55 66 77
111 222 333 444 555 666 777
合并为:
6 7 c d
6 7 cc dd
66 77 c d
66 77 cc dd
666 777 c d
666 777 cc dd
就是第一个文件的最后2列和第二个文件的最后两列循环放在一行。
- awk 'NR==FNR{a[FNR]=$(NF-1) FS $NF;l=FNR;next}{for(i=1;i<=l;i++)print $(NF-1),$NF,a[i]}
[解析]
从合并后的文本可以看出是把file1的最后2列循环合并到file2的最后两列中,NR==FNR即为第一个文本文件判断也就是后面跟的参数file1,这时候以FNR数组下标把倒数第2个域FS(域分割符,默认空格)最后一个域赋值给数组a,得到下面的内容:
a[1]=c d
a[2]=cc dd
因为file1只有两行,这时候FNR的值为2,赋给变量l,next的作用,类似C语言中的continue,不再执行后面的action,当awk读到file2时,这个时候FNR会初始化,不再等于NR,那么跳过这个pattern{action},执行后面的for循环,打印file2的倒数第2个域 FS 最后一个域 FS a[1],这样循环打印下去得到合并的内容。
阅读(2835) | 评论(0) | 转发(0) |