请使用awk命令将如下两份文件中名字相同的两行合并起来 A文件: 孙行者 50岁 行者孙 500岁 者行孙 5000岁 孙者行 50000岁 B文件: 行者孙 男 者行孙 男 孙行者 男 孙者行 男 输出效果: 孙行者 50岁 男
[[email protected] ~]$ cat a b |sort -k1 |awk ‘BEGIN{t=""}{t=$1;if(tt==t){printf("%s",$2);printf("\n")}else{printf("%s %s ",$1,$2);}tt=t}‘ 孙者行 50000岁 男 孙行者 50岁 男 者行孙 5000岁 男 行者孙 500岁 男
思路:先合并两个文件并排序
[[email protected] ~]$ cat a b |sort -k1 孙者行 50000岁 孙者行 男 孙行者 50岁 孙行者 男 者行孙 5000岁 者行孙 男 行者孙 500岁 行者孙 男
先定义一个容器为$1,也就是名字,然后做判断如果下一行的$1与这个相同的话,只输出$2,并换行。因为定义为空,所以不符合所以判断else输出$1,$2 也就是 孙者行 50000。其后判断相同只输出 $2 并换行。 如果说要的输出效果是 孙行者 50岁 男
那要怎么办呢?
cat a b |sort -k1 |awk ‘BEGIN{t=""}{t=$1;if(tt==t){printf("\t");printf("%s",$2);printf("\n")}else{printf("%s %s",$1,$2);printf("\n")}tt=t}‘ 孙者行 50000岁 男 孙行者 50岁 男 者行孙 5000岁 男 行者孙 500岁 男 思路其实都是一样的。
时间: 2024-12-11 00:24:21