2つのファイルを比較し、部分的に一致しない行を追加する方法は?

2つのファイルを比較し、部分的に一致しない行を追加する方法は?

Extensions.txt2つのファイル(と)を比較しようとしていますTemp.txtExtensions.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適切な結果を得るためにどのように機能するかを完全に理解していません。

ベストアンサー1

次のコマンドを使用してファイルを解析できます。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
  • このとき、2番目のファイルに対して2番目の操作が行われますFNR != NR。最初のフィールドが一致した場合は、保存した行を印刷し、elseそのフィールドを別の配列に保存しますmissing
  • ではEND、欠落している行を印刷します。

おすすめ記事