使用bash获取重复的ID

时间:2010-08-21 13:05:35

标签: bash scripting

我有一个格式为

的日志文件
  

id操作

     

id成功消息

第二个id与第一个id相同,但是只有操作成功。如何将这两行从日志中获取到新文件?

2 个答案:

答案 0 :(得分:0)

它是主要的,但你可以很容易地做这样的事情:

cat file.log | cut -d " " -f1 | uniq -d > succesfulOperationIDs.dat

while read line
do
     grep ^$line file.log > successLog.log
done < succesfulOperationIDs.dat

rm -f succesfulOperationIDs.dat

这会创建一个不止一次出现的id列表(假设空格是正确的分隔符),然后将所有以这些id开头的行放入新文件中。

答案 1 :(得分:0)

尝试一下:

awk '{if ($1 == previd) {print prevline; print} else {previd = $1; prevline = $0}}' logfile > newfile

它假定成功消息紧跟操作消息。

如果情况并非如此,那么试试这个:

awk '{if (ids[$1]) {print lines[$1]; print} else {ids[$1] = $1; lines[$1] = $0}}' logfile > newfile

如果操作和成功消息使用相同的ID多次成对出现,则可能需要在每次输出对时重置跟踪:

awk '{if (ids[$1]) {print lines[$1]; print; delete ids[$1]; delete lines[$1]} else {ids[$1] = $1; lines[$1] = $0}}' logfile > newfile