スペースで区切られたフィールドを持つ長いテキスト ファイルがあります。
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.txt
1 列目 ( ) を比較し、 で一致しなかったファイルを出力します。$1
file1.txt
file2.txt
file2.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