fileA.txtのパターンでgrepを使用し、fileB.tabで検索する方法を見つけようとしています。私が望む結果は、fileB.tabの各パターンが発生した回数です。
私は試した:
grep -f FileA.txt FileB.tab | wc -l
しかし、これはfileA.tabパターンが発生するFileB.tabのすべての行を返すと思います。
答え1
patterns
ファイルに固定文字列のみが含まれている場合は、gnu
設定で次のことができます。
grep -oFf patterns infile | sort | uniq -c
内容が正規表現なら、次のようになります。
sed -E 'h;s|/|\\&|g;x;s|[\&/]|\\&|g;H;x;s|(.*)\n(.*)|s/\1/\2/|' patterns \
| sed -f - <(grep -of patterns infile) | sort | uniq -c
つまり、grep
今回のみ同じコマンドを使用して結果を処理し、一致が実際のsed
パターンに置き換えられるようにします(sed
コンテンツに基づく他のスクリプトを介してpatterns
)。
答え2
uniq には発生回数を計算するオプションがあります。
grep -f fileA.txt fileB.txt | uniq -c
ただし、fileAに重複するエントリがある場合は、そのエントリを見つけるために複数回grepを実行するため、カウントが正しくありません。この場合、fileAは最初にuniqを介して実行され、重複したエントリを削除してからパターンに使用されます。
新しいファイルでフィルタリングしたり、ファイルを1行ずつ処理したり、そこで実行したりできます。
while read keyword; do grep $keyword fileB.txt; done < fileA.txt | uniq -c