2017-06-03 241 views
-1

我有一個文件列表,我想在這些文件中查找一些特定的關鍵字。輸出應該是每個帶有匹配文件的行,並顯示我們找到的單詞。舉例來說,如果我有以下文件test.txt使用grep返回每個文件中一行中匹配字的列表

one,two,three 
four,five,six, 
seven,eight,nine 

和我做的話,五到八次一個grep的,它應該返回是這樣的:

test.txt:five,eight 

我不感興趣在行中,或者匹配的數量。我只想知道每個文件中哪些詞匹配。我怎樣才能做到這一點?

+0

你必須添加自己的努力來解決這個...我不要不要以爲grep是一個不錯的選擇。當你搜索多個文件時,改變問題至少包含兩個文件和相關的輸出 – Sundeep

回答

0

GNU 的grep + AWK解決方案:

比方說,我們有文件test1.txt與內容:

one,two,three 
four,five,six, 
seven,eight,nine 

test2.txt與內容:

one 
two 
three, four, five 
grep -Hwo '\(five\|eight\)' test* 
| awk -F':' '{ a[$1]=(a[$1])? a[$1]","$2:$2 }END{ for(i in a) print i FS a[i] }' 

輸出:

test1.txt:five,eight 
test2.txt:five 

的grep細節:

  • 查找單詞fiveeight匹配-H - 打印的文件名對於每個匹配

  • -w - 僅選擇那些含有形成完整的詞

    匹配線
  • -o - 打印只有匹配的(非空)的匹配線的部分

AWK細節:

  • -F':' - 場分離

  • a[$1]=(a[$1])? a[$1]","$2:$2 - 使用文件名作爲$1陣列鍵累加所有匹配的單詞

相關問題