Bash

比較兩個 URL 列表並將新添加的 URL 列印到新文件

  • March 11, 2021

我最初生成了兩個包含 URL 列表的文件——我將它們稱為oldnew。我想比較這兩個文件,如果文件中有任何new不在文件中的URL old,我希望將它們顯示在extra_urls文件中。

現在,我已經閱讀了一些有關使用diff命令的內容,但據我所知,這也分析了資訊的順序。我不希望訂單對輸出產生任何影響。我只想將額外的 URLnew列印到extra_urls文件中,無論它們在其他兩個文件中的任何一個中以什麼順序放置。

我怎樣才能做到這一點?

您可以使用該comm命令比較兩個文件,並有選擇地顯示一個或另一個唯一的行,或共同的行。它需要對輸入進行排序,但您可以使用程序替換對它們進行動態排序。

comm -13 <(sort old.txt) <(sort new.txt)

如果您使用的版本bash不支持程序替換,則可以使用命名管道對其進行模擬。Wikipedia中顯示了一個範例。

我只會使用grep

grep -vFf old new > extra_urls

解釋

  • -f: 告訴grep從文件中讀取其搜尋模式。在這種情況下,old
  • -v: 告訴 grep 反轉匹配,只列印不匹配的行。
  • -F: 告訴 grep 將其搜尋模式解釋為字元串,而不是正則表達式。這樣,.URL 的 將按字面意思匹配。

結合起來,這些可以grep列印任何new不在old. 文件中 URL 的順序無關緊要。

引用自:https://unix.stackexchange.com/questions/244942