我有一个格式为
的日志文件id操作
id成功消息
第二个id与第一个id相同,但是只有操作成功。如何将这两行从日志中获取到新文件?
答案 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