我有一个文件列表,我想在这些文件中查找一些特定的关键字。对于每个匹配的文件,输出应该是一行,显示我们只找到一次的单词。例如,如果我有以下文件test.txt
one,two,three
four,five,six,
seven,eight,nine
我做了第五和第八个字的grep,它应该返回这样的东西:
test.txt:five,eight
我对线路或比赛数量不感兴趣。我只是想知道每个文件中匹配的单词。我怎么能这样做?
答案 0 :(得分:0)
GNU grep + awk 解决方案:
我们说我们的文件test1.txt
包含内容:
one,two,three
four,five,six,
seven,eight,nine
带有内容的和test2.txt
:
one
two
three, four, five
查找单词five
和eight
的匹配项:
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 详情:
-H
- 打印每场比赛的文件名
-w
- 仅选择包含构成整个单词的匹配项的行
-o
- 仅打印匹配行的匹配(非空)部分
awk 详细信息:
-F':'
- 字段分隔符
a[$1]=(a[$1])? a[$1]","$2:$2
- 使用文件名$1
作为数组键来累积所有匹配的单词