![使用 grep 并寻找唯一的出现次数](https://linux22.com/image/87688/%E4%BD%BF%E7%94%A8%20grep%20%E5%B9%B6%E5%AF%BB%E6%89%BE%E5%94%AF%E4%B8%80%E7%9A%84%E5%87%BA%E7%8E%B0%E6%AC%A1%E6%95%B0.png)
我有一个这种类型的文本文件,我将查找包含该字符串的任何行Validating Classification
,然后获取唯一报告的错误。我不知道可能的错误类型。
输入文件:
201600415 10:40 Error Validating Classification: error1
201600415 10:41 Error Validating Classification: error1
201600415 10:42 Error Validating Classification: error2
201600415 10:43 Error Validating Classification: error3
201600415 10:44 Error Validating Classification: error3
输出文件
201600415 10:40 Error Validating Classification: error1
201600415 10:42 Error Validating Classification: error2
201600415 10:43 Error Validating Classification: error3
我可以使用 grep、管道和其他命令来实现这一点吗?
答案1
您将需要丢弃时间戳,但“grep”和“sort --unique”一起可以为您做到这一点。
grep --only-matching 'Validating Classification.*' | sort --unique
因此grep -o
只会显示与您的正则表达式匹配的行的部分(这就是为什么您需要包含 来.*
包含所有内容后“验证分类”匹配)。然后一旦你有了错误列表,你就可以使用sort -u
只获取唯一的错误列表。
答案2
您可以使用此命令,假设您的数据位于文件 test 中
uniq -f 2 <test
答案3
我会选择 awk
awk -F: '{ if (!a[$3]++ ) print ;}' file
-F:
用途:作为分隔符$3
是模式之后:
!a[$3]++
确保仅在第一次出现时为真