在Unix中搜索和打印

时间:2016-10-03 09:13:57

标签: linux unix

我在UNIX服务器上有一个日志文件,我正在尝试搜索单个模式并从日志中打印多个字符串。

例如,日志如下:

2016-01-01 10:10:10.234 SEND <Msg><Name>XYZ</Name><ID>1231231</ID></Msg>
2016-01-01 10:10:10.333 RECIEVE <Msg><Name>XYZ</Name><ID>1231231</ID></Msg> 
2016-01-01 10:10:11.434 SEND <Msg><Name>ABC</Name><ID>2231231</ID></Msg>
2016-01-01 10:10:11.533 RECIEVE <Msg><Name>ABC</Name><ID>2231231</ID></Msg>

我想搜索&#39; SEND&#39;并按如下方式打印输出:

10:10:10 1231231
10:10:11 2231231

Thanx提前

2 个答案:

答案 0 :(得分:0)

我想你可以尝试这个程序:

#!/bin/bash

awk '{
    if($3 == "SEND") {
        gsub(/\..*/, "", $2)
        match($4, /<ID>([0-9]+)<\/ID>/, ary)
        printf "%s %s\n", $2, ary[1]
    }
}' input.txt

input.txt是您的示例日志,上述程序的输出为:

10:10:10 SEND
10:10:11 SEND

答案 1 :(得分:0)

感谢所有帮助过我的人。我能得到结果。以下是我使用的命令:

cat test.txt | grep "SEND" | sed 's/<\/ID>.*//g'|awk 'BEGIN {FS=" |>"} {print $2, $NF}'