
我試圖弄清楚如何將 grep 與 fileA.txt 中的模式一起使用,並在 fileB.tab 中找到它們。我想要的結果是 fileB.tab 中每個模式的出現次數。
我努力了:
grep -f FileA.txt FileB.tab | wc -l
但我認為這讓我傳回了 FileB.tab 中出現 fileA.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 查找它們。在這種情況下,首先透過 uniq 執行 fileA 以刪除重複項,然後將其用於模式。
您可以將其過濾到一個新文件中,或者逐行處理該文件並從中運行。
while read keyword; do grep $keyword fileB.txt; done < fileA.txt | uniq -c