ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [Shell] awk-合并文本内容(join)

[Shell] awk-合并文本内容(join)

原创 Linux操作系统 作者:tolilong 时间:2016-04-28 13:55:05 0 删除 编辑
在论坛上看到的问题,记录下
[/tmp/test]# cat tt6
aa  1   2
bb  2   3
cc  3   4
[/tmp/test]# cat tt7
aa   2   1
bb   8   2
cc   4   4
dd   5   5


想将tt6,tt7内容合并为
cc 3 4 4 4
aa 1 2 2 1
bb 2 3 8 2


最开始想到到awk将两个文本的内容进行合并
[/tmp/test]# awk 'NR==FNR{a[$1]=$2"  "$3}{if(a[$1]){print $0," ",a[$1]}}' tt6 tt7
aa  1   2   1  2
bb  2   3   2  3
cc  3   4   3  4
aa   2   1   1  2
bb   8   2   2  3
cc   4   4   3  4
发现内容重复了.


加上next之后输出ok
[/tmp/test]# awk 'NR==FNR{a[$1]=$2"  "$3;next}{if(a[$1]){print $0," ",a[$1]}}' tt6 tt7     #next表示跳过后面的代码,继续读取下行的record
aa   2   1   1  2
bb   8   2   2  3
cc   4   4   3  4


[/tmp/test]#  awk 'NR==FNR{a[$1]=$2"  "$3;next}{if(a[$1]){print $0," ",a[$1]}}' tt6 tt7 | awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;i++){print a[i]}}'

合并内容可以使用join,这样更方便使用[/tmp/test]# join tt6 tt7
aa 1 2 2 1
bb 2 3 8 2
cc 3 4 4 4


[/tmp/test]# join tt6 tt7 | awk '{a[NR]=$0}END{print a[NR];for(i=1;i<NR;i++){print a[i]}}'
cc 3 4 4 4
aa 1 2 2 1
bb 2 3 8 2

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24237320/viewspace-2090055/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: [Shell] awk 数组(1)
请登录后发表评论 登录
全部评论

注册时间:2010-07-13

  • 博文量
    406
  • 访问量
    1208677