2つの区切りファイルを最初の列と比較する

2つの区切りファイルを最初の列と比較する

ファイル1

james:hello
richard:hello2
johnson:hello3
jam3es:hello
ja1mes:hello

ファイル2

james:hello
ja1mes:hello
johnson:hello3

期待される出力

richard:hello2
jam3es:hello

これら2つのファイルがあり、最初の列(別名)を他のファイル名と比較し、File1の唯一の行を印刷しようとしています。

答え1

私が想像できるどのロケールでも、ファイルが最初の列でソートされていないようですが、ソートするとexjoinオプションを簡単に使用できます-v

$ join -t ':' -v 1 <(sort -t ':' file1) <(sort -t ':' file2)
jam3es:hello
richard:hello2

与えられた順序で出力が本当に必要な場合は、結果を別のsortコマンドにパイプできます。

答え2

awkはきちんとした解決策を提供します

awk -F: '
    NR == FNR {name[$1]; next}
    !($1 in name)
' file2 file1

出力

richard:hello2
jam3es:hello

サンプル入力ファイルは、行全体が繰り返されることを示しています。これが本当にそうであれば、次のcommユーティリティが便利です。

comm -23 <(sort file1) <(sort file2)

ファイル1に表示される行のみを出力する(オプションは-2ファイル2にのみ表示される行を抑制し、-3共通行を抑制します)

jam3es:hello
richard:hello2

関連情報