2014-01-06 102 views

回答

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。在读取每行时,我检查是否在读取file2时创建的关联数组“a”中,如果是,则打印出我在file2中找到的所有行,如果没有,我只打印从文件1.

+0

非常感谢你为你解答。在小行上工作得很好,但如果来自file1的行长度为31个字符,它似乎不起作用。任何想法? – user3166438

+0

请使用“编辑”按钮更新您的问题,以显示我的解决方案失败的一些数据,我将为您再次寻找。 –

+0

它的工作原理,对不起。两个文本文件之一是在Windows上创建的,而另一个是在Linux上创建的。我必须删除\ r。 – user3166438

0

另一种可能的解决方案目前符合join

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

谢谢你的回答,但我需要它在file1的相同顺序。 – user3166438

相关问题