次の2つのテキストファイルがあります。
ㅏ
1111|100|11/11/1111|a
2222|200|11/11/1111|a
3333|300|11/11/1111|a
4444|400|11/11/1111|a
第二
1111|100|11/11/1111|a
1111|100|11/11/1111|a
2222|200|11/11/1111|a
3333|300|11/11/1111|a
5555|500|11/11/1111|a
私は次のコマンドを使用しました
awk -F"|" '{ printf "%4s|%3s|\n",$1,$2 }' a | grep -v -f /dev/stdin b
任意の出力....
5555|500|11/11/1111|a
予想される出力は次のとおりです。
1111|100|11/11/1111|a
5555|500|11/11/1111|a
どうすればいいですかgrep
?awk
ベストアンサー1
grep
実際には、ファイルを比較する代わりに、特定の形式の正規表現に一致する個々の行を抽出するために使用されるため、これには適していません。ある一致を返さず、別の一致(ファイルの最初の2行b
)を削除します。
あなたが使用できるcomm
:
$ comm -13 a b
1111|100|11/11/1111|a
5555|500|11/11/1111|a
これはcomm
ソートされた入力データに依存します。
comm
上記のコマンドは、-13
基本出力の最初と3番目の列を削除します。デフォルトでは、最初のファイルの列1の行のみを出力し、2番目のファイルの列2の行のみを出力し、最後の列の共通行のみを出力します(マニュアルの基本ケース参照、最初のファイルの行のみを出力comm
します)。 1列のファイル、2列の2番目のファイルにのみある行、最後の列の共通行(参照:標準ユーティリティ):
$ comm a b
1111|100|11/11/1111|a
1111|100|11/11/1111|a
2222|200|11/11/1111|a
3333|300|11/11/1111|a
4444|400|11/11/1111|a
5555|500|11/11/1111|a