web-dev-qa-db-ja.com

2つのURLリストを比較し、新しく追加されたURLを新しいファイルに出力します

私は最初にURLのリストを含む2つのファイルを作成しています—それらをoldnewと呼びます。 2つのファイルを比較したいのですが、newファイルにoldファイルにないURLがある場合は、それらをextra_urlsに表示したいと思います。ファイル。

diffコマンドの使用についていくつか読んだことがありますが、私が知る限り、これは情報の順序も分析します。順序が出力に影響を与えたくありません。 newの追加のURLをextra_urlsファイルに出力したいのですが、他の2つのファイルのどちらにどのような順序で配置されていてもかまいません。

これどうやってするの?

8
neilH

comm コマンドを使用して、2つのファイルを比較し、一方または他方に固有の行、または共通の行を選択的に表示できます。入力をソートする必要がありますが、プロセス置換を使用して、その場でソートできます。

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

プロセス置換をサポートしないバージョンのbashを使用している場合は、名前付きパイプを使用してエミュレートできます。例を ウィキペディア に示します。

14
Barmar

grepを使用します:

grep -vFf old new > extra_urls

説明

  • -f:ファイルから検索パターンを読み取るようにgrepに指示します。この場合、old
  • -v:一致しない行のみを出力するように、一致を反転するようにgrepに指示します。
  • -F:検索パターンを正規表現ではなく文字列として解釈するようにgrepに指示します。そうすれば、.のURLは文字通り一致します。

これらを組み合わせると、grepnewにない行がoldに出力されます。ファイル内のURLの順序は関係ありません。

6
terdon

順序は重要なので、awkを使用してください

awk '
    NR == FNR {old[$1]=1; next}
    !($1 in old)
' old new > extra
1
glenn jackman

Meldというアプリケーションがあります。 2つ(または3つ)のファイルを並べて表示し、違いを示し、一方から他方への選択的なコピーまたは文字の削除を可能にします。

Meldは、次の端末からインストールできます。

Sudo apt-get install meld 
0
krazykyngekorny