与えられたファイルと共通の単語を持つファイルのリストを作成する最良の方法は何ですか?たとえば、次のような場合があります。
$ ls
mainFile file1 file2 file file4
$ cat mainFile
exquisite malicious sentient pulsating
perspicacious one
tawdry fumigate Baryshnikov O'connor
.cwd
このmainFile
問題を解決するための最良の方法は何ですか?
1行あたりの単語数がmainFile
一定ではないので、cut
いくつかのトリックを使って解決策を見つけました。単語で文字列を作成し、それをコマンド|
で区切って入れようとしますgrep -l "exquisite|malicious|etc" *
。私はどのアプローチでも開いていますが、これはより良いかもしれません。
答え1
まず、mainFileのインデックスを作成し、
sed 's/ /\n/g' mainFile | sort | uniq > mainFile.idx
その後、固定文字列をgrepします。
grep -F -f mainFile.idx file*
答え2
grep
非標準オプションをサポートしている場合-w
(単語の一致について):
grep -lwFe "$(tr -cs "[[:alnum:]_'-]" '[\n*]' < mainfile | sort -u)" file*
答え3
次のコードを使用してください。
for pattern in `cat mainfile`
do
grep -l "$pattern" file*
done
アルン