根据第一列的第一列合并两个未排序的文本文件并保留顺序

时间:2014-01-06 18:24:35

标签: linux bash file text merge

在Linux上,如何根据第一个文件的第一列合并两个未排序的文本文件并保留顺序(从第一个文件开始)。

第一个:

DAC
CAD
ADC
BAC

第二个:

CAD:word
DAC:dog
BAC:house

合并文件:

DAC:dog
CAD:word
ADC
BAC:house

正如我所说,合并文件的行必须与第一个文件的行相同。

提前谢谢。

2 个答案:

答案 0 :(得分:3)

尝试awk:

awk -F: 'FNR==NR{a[$1]=$0;next}{if($1 in a){print a[$1];} else {print;}}' file2 file1

“-F:”将字段分隔符设置为冒号。 “FNR == NR”之后的花括号中的位仅在处理file2时适用。它将整行保存在一个关联数组“a”中,该数组由冒号左侧的field1索引。第二组花括号中的位适用于file1。当读取每一行时,我检查“word”是否在我读取file2时创建的关联数组“a”中,如果是,我打印我在file2中找到的整行,如果没有,我只是打印文件1中的当前行。

答案 1 :(得分:0)

join的另一种可能解决方案:

$ join -t":" -a1 -a2 -11 -21 <(sort file1) <(sort file2)
AD:word
ADC
BAC:house
CAD
DAC:dog