我在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提前
答案 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}'