linux - awk + ​​过滤日志文件

标签 linux perl bash awk sed

我使用了下面的 awk 命令来过滤重复的行

示例:

cat LogFile | awk '!seen[$0]++'

问题是在某些情况下我们需要过滤重复的行,尽管有些字段不同并且它们并不那么重要

例如

日志文件:

 [INFO],[02/Jun/2014-19:30:45],EXE,ds1a,INHT VERION , 1.4.4.3-08
 [INFO],[02/Jun/2014-19:31:25],EXE,ds1a,INHT VERION , 1.4.4.3-08
 [INFO],[02/Jun/2014-19:32:40],EXE,ds1a,INHT VERION , 1.4.4.3-08

请查看此文件 - LogFile

我需要删除第三个分隔符“,”中的重复行,直到行尾,

不管第三个分隔符之前是什么

所以最后我应该得到这个过滤后的文件:(应该总是得到列表中的第一个文件)

    [INFO],[02/Jun/2014-19:30:45],EXE,ds1a,INHT VERION , 1.4.4.3-08

请帮我完成任务

如何从第三个分隔符","过滤LofFile,忽略字段:[INFO],[......],EXE ,

备注-用perl一行也可以植入

最佳答案

对于 gensub() 使用 GNU awk:

$ awk '!seen[gensub(/([^,]*,){3}/,"","")]++' file
[INFO],[02/Jun/2014-19:30:45],EXE,ds1a,INHT VERION , 1.4.4.3-08

使用任何支持 RE 间隔的 awk(大多数现代 awk):

$ awk '{key=$0; sub(/([^,]*,){3}/,"",key)} !seen[key]++' file
[INFO],[02/Jun/2014-19:30:45],EXE,ds1a,INHT VERION , 1.4.4.3-08

关于linux - awk + ​​过滤日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24000436/

相关文章:

arrays - 在 Bash 中将以空格分隔的字符串读入数组

linux - 如何在 bash 脚本中将 select 与 awk 一起使用?

php - 如何通过终端获取 PHP 的 tar.gz 文件?

.net - dnx 执行格式错误

linux - 在双十进制 shell 脚本中打印时间

Perl 读取文件并拆分成变量问题

perl - Mojolicious 未设置 Cookie 域

linux - 由于端口 8443 问题导致 IPA 服务器安装失败

perl - 如何在 Perl 字符串中插入文字\t 和\n?

html - 使用 sed 从 html 中提取 pdf