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
で 、不足している行を印刷します。