如何在grep输出中去除重复文件条目,仅保留首个匹配行?
保留每个文件的首个grep匹配结果
要实现只保留每个文件的第一行匹配内容,用awk就能轻松搞定——它可以跟踪已经处理过的文件路径,遇到重复的条目直接跳过。
解决命令
假设你的grep结果文件名叫grep_results.txt,直接运行这条命令:
awk -F: '!seen[$1]++' grep_results.txt
命令细节解释
-F::把字段分隔符设为冒号,这样$1就对应冒号前的文件路径,$2及后面的内容就是匹配到的文本行。!seen[$1]++:这是awk里处理去重的经典技巧:seen是一个关联数组,用来记录每个文件路径是否已经出现过。第一次遇到某个文件路径时,seen[$1]初始值为0,!0为真,就会打印当前行;紧接着seen[$1]自增为1,之后再碰到同一个文件路径时,!1为假,就会跳过该行不输出。
测试验证
用你给出的示例输入测试:
输入内容:
/user/home/desktop/file1:this is a game /user/home/desktop/file1:what kind of game /user/home/desktop/file1:fast action game /user/home/desktop/file2:a game /user/home/desktop/file3:of game /user/home/desktop/file4:fast game
运行命令后得到的输出完全符合你的期望:
/user/home/desktop/file1:this is a game /user/home/desktop/file2:a game /user/home/desktop/file3:of game /user/home/desktop/file4:fast game
如果不需要先把grep结果存成文件,也可以直接通过管道实时处理:
grep "your_target_pattern" /path/to/search/* | awk -F: '!seen[$1]++'
内容的提问来源于stack exchange,提问作者john mas
相关产品推荐
相关产品推荐

