GNU/Linux >> Linux の 問題 >  >> Linux

2つのファイルを比較して、部分的に一致しない行を追加するにはどうすればよいですか?

2つのファイル(Extensions.txt)を比較しようとしています およびTemp.txt )。 Extensions.txtから部分的に一致しない行がある場合 Temp.txtで 不足している行をTemp.txtに追加したいと思います 。

Extensions.txt (非常に基本的な、1列):

111
1234
4321

Temp.txt

1234/sip:[email protected]:5060  9421b96c5e   Avail   1.480
4321/sip:[email protected]:5060  e9b6b979a4   Avail   1.855

基本的に、私がやりたいのは、/の前のすべてに基づいて一致するものを見つけることです 最初の列に一致するものがない場合は、一致しない行をファイルの最後に印刷して、次のようにします。

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111

これまで、grep -vを試しました 希望する結果が得られないので、awkも試してみました それが道のりのようですが、awkの方法を完全には理解していません。 適切な結果を生み出すために機能します。

承認された回答:

awkを使用してファイルを解析できます

awk -F '/' '
    FNR == NR {seen[$1] = $0; next}
    {if ($1 in seen) print seen[$1]; else missing[$1]}
    END {for (x in missing) print x}
' Temp.txt Extensions.txt

出力:

1234/sip:[email protected]:5060 9421b96c5e Avail 1.480
4321/sip:[email protected]:5060 e9b6b979a4 Avail 1.855
111
  • フィールドセパレータをスラッシュに設定します。-F '/'
  • FNR == NRの後のアクション 最初の入力ファイルの行に対して実行されます。連想配列seenに行を格納します キーとして、nextに移動します 行。
  • FNR != NRの場合、2番目のアクションは2番目のファイルに対して実行されます。 。最初のフィールドが一致する場合、保存された行elseを出力します フィールドを別の配列に保存しますmissing
  • ENDで 、不足している行を印刷します。

Linux
  1. diff3ツールを使用してLinuxで3つのファイルを比較する方法

  2. Linuxでファイルを圧縮および解凍する方法

  3. 異なるファイルの2つの列を比較し、一致する場合は印刷しますか?

  1. Linuxでファイルとディレクトリを圧縮する方法(例付き)

  2. ファイルに複数の行を追加するにはどうすればよいですか?

  3. 11 Linux diff3 コマンドの例 (3 つのファイルを 1 行ずつ比較)

  1. Linuxでテキストファイルに行番号を追加する方法

  2. Linuxで2つのテキストファイルを結合する方法

  3. Linux および Unix でファイルをコピーする方法10 cp コマンドの例