在Linux上,如何合并基于第一个文件的第一列的两个未排序的文本文件并保留顺序(从第一个文件)。基于第一个文件的第一列合并两个未排序的文本文件并保留顺序
第一招:
DAC
CAD
ADC
BAC
第二个:
CAD:word
DAC:dog
BAC:house
合并的文件:
DAC:dog
CAD:word
ADC
BAC:house
正如我所说的,合并后的文件的行必须在第一个文件的顺序相同。
预先感谢您。
在Linux上,如何合并基于第一个文件的第一列的两个未排序的文本文件并保留顺序(从第一个文件)。基于第一个文件的第一列合并两个未排序的文本文件并保留顺序
第一招:
DAC
CAD
ADC
BAC
第二个:
CAD:word
DAC:dog
BAC:house
合并的文件:
DAC:dog
CAD:word
ADC
BAC:house
正如我所说的,合并后的文件的行必须在第一个文件的顺序相同。
预先感谢您。
尝试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。在读取每行时,我检查是否在读取file2时创建的关联数组“a”中,如果是,则打印出我在file2中找到的所有行,如果没有,我只打印从文件1.
另一种可能的解决方案目前符合join
:
$ join -t":" -a1 -a2 -11 -21 <(sort file1) <(sort file2)
AD:word
ADC
BAC:house
CAD
DAC:dog
谢谢你的回答,但我需要它在file1的相同顺序。 – user3166438
非常感谢你为你解答。在小行上工作得很好,但如果来自file1的行长度为31个字符,它似乎不起作用。任何想法? – user3166438
请使用“编辑”按钮更新您的问题,以显示我的解决方案失败的一些数据,我将为您再次寻找。 –
它的工作原理,对不起。两个文本文件之一是在Windows上创建的,而另一个是在Linux上创建的。我必须删除\ r。 – user3166438