0

嘿,伙计们想知道是否有人可以帮助解决这个小困境

尝试从具有重复字符串的 syslog 文本文件中删除行

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

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

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

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

任何帮助表示赞赏!谢谢

4

1 回答 1

0

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

  • 首先,创建一个新文件,命名为 uvalues.txt
  • 逐行读取文件,对每一行grep for "u:",将结果存入$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
于 2011-03-18T16:54:15.917 回答