【发布时间】:2014-08-22 17:16:56
【问题描述】:
我有两个未排序的文本文件,如下所示,它们的行数不一定相同:
在 A.txt 中,我们每行只有一个唯一元素:
a7
a1
a5
a2
a6
a8
a4
在 B.txt 中,每一行都有一个唯一的元素对:
a1 a2
a7 a6
a1 a5
a5 a8
a1 a4
a2 a1
a4 a5
a6 a7
a8 a2
如果有多个具有共同第一个元素的对,我首先想以某种方式合并 B.txt 的行,第二个元素必须像这样连接:
TempAB.txt
a1 a2 a5 a4
a7 a6
a5 a8
a2 a1
a4 a5
a6 a7
a8 a2
然后最终输出的顺序必须和A.txt一样,比如:
AB.txt
a7 a6
a1 a2 a5 a4
a5 a8
a2 a1
a6 a7
a8 a2
a4 a5
使用 awk 有什么建议吗?
【问题讨论】:
-
您是否真的需要该中间文件,或者您只是认为这是生成最终文件的必要方法?您希望 B.txt 中以 A.txt 中不存在的值开头的行做什么,例如
a3或者这永远不会发生? -
在unix.com/shell-programming-and-scripting/… 找到第一部分的代码 .... awk 的 != $1 || NR ==1{s=$1;if(p){打印 p};p=$0;next} {sub($1,"",$0);p=p""$0;}END{打印 p}' B .txt
-
@Ed Morton:不,没有必要。我只是想一步一步地解释。
-
不要假设你在任何网站或论坛上找到的 awk 代码,包括这个,是合理的,除非你从新闻组 comp.lang.awk 获得它,它会被所有的awk 专家。你发布的那个sn-p是不合理的。
标签: awk text-processing