別のテキストファイルに表示される1つのテキストファイル内のすべての単語を検索する

別のテキストファイルに表示される1つのテキストファイル内のすべての単語を検索する

a.txt2つのファイルがあり、その中にあるすべての単語をb.txt探したいとしましょう。a.txtb.txt

これを行う特定のコマンドはありますか?

ベストアンサー1

bashそして以下を使用するzshいくつかの実装ksh

comm -12 <(tr -s '[:space:]' '[\n*]' < a.txt | sort -u) \
         <(tr -s '[:space:]' '[\n*]' < b.txt | sort -u)

そこ、言葉空白以外の文字のシーケンスです(GNUの場合、trマルチバイト空白文字では機能しません)。

comm2つのソートされたファイル間の共通行を見つけます。オプションがないと、3つの列(file1にのみある行、file2にのみある行、両方に共通の行)が印刷されます。出力からその列を削除するには-1-2を追加します。-3したがって、comm -123番目の列(共通線)のみが残ります。

tr -s '[:space:]' '[\n*]' ティーどんなピンインでもSクラス文字シーケンスはspaceそれぞれをラップします。言葉独自のラインで。

sort -utr出力をソートし、重複項目を削除します。

プロセスの置き換え<(...)は、コマンド出力tr|sortcomm


そしてzsh

w1=($(<a.txt)) w2=($(<b.txt))
print -rl -- ${(u)${w1:*w2}}

そこ、言葉スペース、タブ、nul、および改行以外の文字シーケンスです(デフォルトは$IFS)。

$(<a.txt)$(cat a.txt)zshwhereを呼び出さずにファイルの内容自体を読み取ることができる最適化されたバージョンcat。引用しないので、単語分割を実行します(ただし、他のシェルとは異なり、ワイルドカードを実行しません)。

したがって、sumは合計のすべての単語をw1含む配列です。w2a.txtb.txt

${w1:*w2}2つの配列(2つの配列に共通の要素)の交点を提供するzsh演算子。(u)一意の要素を保持(重複排除)するパラメータ拡張フラグ。

print -rl各引数を1行に1つずつ印刷します。

おすすめ記事