2014-01-06 136 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

相關問題