【问题标题】:need to remove lines from syslog that have a certain string of data duplicate需要从 syslog 中删除具有某些重复数据字符串的行
【发布时间】:2011-07-18 07:26:50
【问题描述】:

大家想知道是否有人可以帮助解决这个小难题

尝试从系统日志文本文件中删除具有重复字符串的行

3 月 10 日 06:51:11[http-8080-1] INFO com.MYCOMPANY.webservices.userservice.web.UserServiceController [u:2533274802474744|360] 授权 [platformI$tformIdAndOs=2533274802474744|360, userRegion=America| 360]

然后向下几行

3 月 10 日 06:52:03 [http-8080-1] INFO com.MYCOMPANY.webservices.userservice.web.UserServiceController [u:2533274802474744|360] 授权 [platformI$tformIdAndOs=2533274802474744|360, userRegion=America| 360度

在 u: 数字方面得到了相同的东西,但问题是我需要删除重复项并只留下一个,并且该文件有多个不同 u: 数字的重复项,它有 14,000 行长。

谁能告诉我是否可以使用 awk?赛德?或排序这样的事情?删除其中包含重复的特定字符串的行。

我基本上需要去重复,但问题是只有一小部分字符串是指标。

感谢任何帮助!谢谢

【问题讨论】:

    标签: string duplicates lines


    【解决方案1】:

    可能有更好的方法来做到这一点,但这是我的第一次尝试:

    • 首先,新建一个文件,调用它 uvalues.txt
    • 逐行读取文件,对于每个 "u:" 行 grep,存储结果 在$u
    • 如果uvalues.txt中存在$u,忽略 这一行
    • 如果uvalues.txt中不存在$u,则将此行写入另一个文件,将$u写入uvalues.txt
    • 重复

    代码应该是这样的:

    #!/bin/bash
    
    touch uvalues.txt
    
    for l in `cat file.txt`; do
            uvalue=`echo "$l" | grep "u:" | cut -f2 -d':' | cut -f1 -d'|'`
            #if uvalue is not empty, check it against our temp file
            if [ -n "$uvalue" ]; then
                    existing_value=`grep "$uvalue" uvalues.txt`;
                    #if it is empty, it means it's not a duplicate
                    if [ -z "$existing_value" ]; then
                            echo $l >> save.txt
                            echo $uvalue >> uvalues.txt
                    fi
            fi
    done
    
    rm uvalues.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2015-08-06
      • 2016-03-05
      • 2018-12-21
      • 2014-03-26
      • 1970-01-01
      • 2014-11-19
      相关资源
      最近更新 更多