在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