2つのファイル列を比較する

2つのファイル列を比較する

スペースで区切られたフィールドを持つ長いテキスト ファイルがあります。

cat file1.txt
Id    leng  sal   mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534

cat file2.txt
Id    number
25671 34343 
76767 34234 
23343 23423 
66776 23343 

cat output.txt
Id    leng  sal   mon
44888 56565 45554 6868
77765 88688 87464 6848

file1.txtには 4 つの列があり、には 2 つの列があります。両方のファイル ( 、 ) のfile2.txt1 列目 ( ) を比較し、 で一致しなかったファイルを出力します。$1file1.txtfile2.txtfile2.txt

私が試してみました

join -v1 file1.txt file2.txt >output.txt

しかし、出力にはいくつかエラーがあります。/ コマンドがあればawkありがたいsedです。

答え1

を使用するにはjoin、FILE1とFILE2がソート結合フィールドで。

次のコマンドで問題が解決するはずです:

join -v1 <(sort file1.txt) <(sort file2.txt)

答え2

こんな感じですが、ヘッダー行は含まれません:

$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848

注: これは、説明ではなく、例の出力に合わせて調整しました。逆の場合は、file1 と file2 を入れ替えるだけです。

これを詳しく見てみましょう:

  • awkフィールド1のみを印刷しますfile2.txt
  • grep -v一致を反転します(一致しない行を出力します)
  • -f -grepは、ファイル(この場合は-STDIN))から一致パターンのリストを読み込むように指示します。これは、awk

関連情報