需要从syslog中删除具有特定数据串重复的行

时间:2011-03-18 16:15:56

标签: string duplicates lines

嘿,大家好奇是否有人可以帮助解决这个小困境

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

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

然后几行

Mar 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:number方面得到了相同的东西,但问题是我需要删除重复项,只留下一个,文件有多个不同的u:数字重复,并且它的长度为14,000行。

任何人都可以告诉我,我是否可以使用awk? SED?或者为这样的东西排序?删除那里有重复的某个字符串的行。

我基本上需要重复数据删除,但问题只是字符串的一小部分是指标。

任何帮助表示赞赏!感谢

1 个答案:

答案 0 :(得分:0)

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

  • 首先,创建一个新文件,然后调用它 uvalues.txt
  • 逐行读取文件 对于“u:”行grep,存储结果 在$ u
  • 如果$ u存在于uvalues.txt中,请忽略 这一行
  • 如果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