修飾子を持つ文書から一致するフィールドデータを印刷するには?

修飾子を持つ文書から一致するフィールドデータを印刷するには?

3列のCSV文書があります。列1にはMD5チェックサムがあります。列2にはファイルパスが含まれています。列 3 は空であるか、一意の識別子があります。

はい

0000801f8b7a5c3b483809ef069d4d82,/Volumes/Somepath2/Somefile1,Uniquecode
0000801f8b7a5c3b483809ef069d4d82,/Volumes/Somepath2/Somefile2,Uniquecode
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath3/Somefile2,
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath4/Somefile3,Uniquecode
005040886c659d73c8596b40a70ff231,/Volumes/Somepath5/Somefile4,
005040886c659d73c8596b40a70ff231,/Volumes/Somepath6/Somefile4,

私が望むのは、一致するチェックサムがあり、ファイルに一意のコードフィールドが埋め込まれた行だけを印刷することです。ただし、ファイルが一意のコードを持つ他のファイルと一致する場合は印刷しません。したがって、上記の例では、次のような結果が出力されます。

0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath4/Somefile3,Uniquecode

最初の2つのファイルはチェックサムと一致しますが、両方とも一意のコードを共有するので、印刷したくありません。最後の 2 つはチェックサムと一致しますが、3 つのフィールドはすべて埋められませんでしたが、中央の 2 つは一致し、1 つだけ固有のコードが埋め込まれています。リストには、ファイルがチェックサムと一致する複数のインスタンスがあります。

私はawkを使ってこれをやろうとしていますが、それについてよく知らず、これらのルールをすべて入力する方法がわかりません。

どんな助けでも大変感謝します。

ベストアンサー1

$ awk -F, 'NR==FNR{a[$1,$3]; next} ($3 != "") && (($1,"") in a)' file file
0044f99638140c2eec15aa78eeb41d5e,/Volumes/Somepath4/Somefile3,Uniquecode

上記は2つのファイルパスを実行します。最初は入力の最初と3番目のフィールドを連結してインデックス付き配列を作成し、2番目は入力される3番目のフィールドをテストし、最初のフィールドの接続で構成されます。フィールドと配列を保存し、現在行がある場合は印刷します。

おすすめ記事