2013-11-04 25 views
0

我有一長串關鍵字和一個單一的數據文件。我想根據提供的關鍵字過濾這個數據文件。我怎樣纔能有效地做到這一點?我知道我可以使用for循環,每次使用一個關鍵字,並在數據文件中使用grep關鍵字。如何grep一個沒有循環的關鍵字長列表

foreach keyword (`cat keywords`) 
grep $keyword data_raw >> data_filtered 
end 

我也嘗試過perl管道,但它看起來效率很低。

cat keyword | perl -ne '$a = `grep "$_" data_raw`; print $a;' > data_filtered 

是否有任何有效的單行方式來完成這項工作?

+1

輸出順序是否重要?最有效的解決方案是同時查找所有關鍵字(目前的答案都是這樣做),而輸出將按輸入文件中的單詞排序,並且如果一行匹配多個關鍵字,則包含重複項。如果這就是你真正想要的東西,你可能需要編輯來澄清你的要求。 – tripleee

回答

8

您可以使用grep -f此:

grep -f keywords data_raw 

讓所有模式將從文件keywords讀取。

man grep

-f FILE,--file = FILE

獲取從文件模式,每行一個。空文件包含零個 模式,因此不匹配任何內容。 (-f由POSIX指定)

相關問題