![両方のファイルで重複する項目を探す [重複]](https://linux33.com/image/122890/%E4%B8%A1%E6%96%B9%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A7%E9%87%8D%E8%A4%87%E3%81%99%E3%82%8B%E9%A0%85%E7%9B%AE%E3%82%92%E6%8E%A2%E3%81%99%20%5B%E9%87%8D%E8%A4%87%5D.png)
1つのファイルから1行を読み、2番目のファイルにその行があることを確認するスクリプトを作成する必要があります。 '、'、\などのファイルの特殊文字を処理する方法は?
最初のファイル:
a.txt
aa
bb
cc
f
'f'
"g"
'h'
2番目のファイル:
b.txt
cc
dd
'f'
"g"
g
h
注文する:
cat a.txt | xargs -I{} grep -w {} b.txt
返品:
cc
'f'
'f'
"g"
g <- it shouldn't be there
h <- it shouldn't be there
期待される:
cc
'f'
"g"
私の場合、最後のエントリ(h)はa.txtファイルには存在しないため、リストしないでください。 「h」(一重引用符)のみ可能です。将来予期しない状況が発生しないようにするには、通常どのように処理する必要がありますか?
答え1
これがまさにこのcomm
ユーティリティの目的です。通常、この行を実行して入力ファイルをソートして供給することができますcomm
。これらの-12
オプションは、ファイル1と2に固有の行を表示せずに共通行のみを表示することを意味します。
comm -12 <(sort a.txt) <(sort b.txt)
cc
'f'
"g"