這兩個文件都有至少2000行的字符串和數字數據行。 如何將非重複數據從file2.txt
添加到file1.txt
。 基本上file2有新的數據行,但我們也想確保我們不會向file1.txt添加重複的行。比較unix中的兩個文件並將增量添加到一個文件
File1.txt
>這是主數據文件File2.txt
>這個文件有我們想要添加到file1
感謝新數據,
這兩個文件都有至少2000行的字符串和數字數據行。 如何將非重複數據從file2.txt
添加到file1.txt
。 基本上file2有新的數據行,但我們也想確保我們不會向file1.txt添加重複的行。比較unix中的兩個文件並將增量添加到一個文件
File1.txt
>這是主數據文件File2.txt
>這個文件有我們想要添加到file1感謝新數據,
排序兩個文件與一起-u
選項可以刪除重複項。
sort -u File1.txt File2.txt > NewFile.txt && mv NewFile.txt File1.txt
您可以使用grep
,像這樣:
# grep those lines from file2 which are not in file1
grep -vFf file1 file2 > new_file2
# append the results to file1
cat new_file2 >> file1
嗯。從內存使用的角度來看,這味道可能很昂貴。 (如果它需要更多的內存,'sort'可能會破壞它的工作,以便將部分保留在磁盤上,但是我不確定如果grep會試圖保留模式列表或構造一個模式列表正則表達式來自特別大的來源列表)。 –
另一方面,這保留了線的現有順序,並且不花費時間排序。根據使用情況,這可能是最好的解決方案,或唯一正確的解決方案,這三個答案。 – hek2mgl
公平的論據。如果我是OP,並且這種方法是我的文件隨着時間的推移將被修改的唯一方式,那麼我可能會花費一次*對文件進行排序*,然後使用'comm'方法......但你說得對,這裏有一切用例。 –
使用awk:
awk '!a[$0]++' File1.txt File2.txt
這對已經存在的方法有什麼優勢?它的內存效率低下 - 甚至超過grep -vf方法,因爲這種方法甚至可以在內存中存儲第二個文件中存儲的行,而只存儲來自已存在文件的行 - 我不確定它增加了什麼好處。 –
這些行的順序是否顯着?他們排序了嗎? – Barmar
順序並不重要。 – Vcode