2014-01-23 35 views
0

您好我有一个日志文件trace.log,其中打印时间戳,线程名称和事务处理方法和事务ID如下。shell脚本将选定的文本写入单行

2014-01-23 15:50:41,724 [catalina-exec-35] INFO TRANSACTION getConnection REQUEST, ID=1308:: 
2014-01-23 15:50:41,725 [catalina-exec-33] INFO TRANSACTION getConnection REQUEST, ID=1304:: 
2014-01-23 15:50:41,727 [catalina-exec-10] INFO TRANSACTION getConnection REQUEST, ID=1298:: 
2014-01-23 15:50:41,727 [catalina-exec-24] INFO TRANSACTION getConnection REQUEST, ID=1307:: 
2014-01-23 15:50:41,727 [catalina-exec-12] INFO TRANSACTION getConnection DONE, ID=1305:: 
2014-01-23 15:50:41,733 [catalina-exec-10] INFO TRANSACTION getConnection DONE, ID=1298:: 
2014-01-23 15:50:41,734 [catalina-exec-26] INFO TRANSACTION getConnection REQUEST, ID=1313:: 
2014-01-23 15:50:41,734 [catalina-exec-26] INFO TRANSACTION getConnection DONE, ID=1313:: 
2014-01-23 15:50:41,738 [catalina-exec-39] INFO TRANSACTION getConnection REQUEST, ID=1311:: 
2014-01-23 15:50:41,733 [catalina-exec-35] INFO TRANSACTION getConnection DONE, ID=1308:: 
2014-01-23 15:50:41,738 [catalina-exec-27] INFO TRANSACTION getConnection REQUEST, ID=1309:: 
2014-01-23 15:50:41,737 [catalina-exec-22] INFO TRANSACTION getConnection REQUEST, ID=1310:: 
2014-01-23 15:50:41,743 [catalina-exec-30] INFO TRANSACTION getConnection REQUEST, ID=1315:: 
2014-01-23 15:50:41,744 [catalina-exec-39] INFO TRANSACTION getConnection DONE, ID=1311:: 
2014-01-23 15:50:41,747 [catalina-exec-2] INFO TRANSACTION getConnection REQUEST, ID=1318:: 

我想grep和打印的getConnection REQUEST和的getConnection在一行DONE用于perticular ID到一个文件的时间戳。

我有一个书面的shell脚本,可以在多行中打印时间戳,如下所示。 这里是我的shell脚本

for i in {1..800} 
do 
     echo "Welcome $i times" 
     echo "ID=$i, getConnection " >> time.log 
     grep ID=$i: trace.log | grep getConnection | cut -d'[' -s -f1 >> time.log 
echo "  " >> time.log 
done 

输出如下图所示

ID=791, getConnection 
    2014-01-23 15:50:16,703 
    2014-01-23 15:50:16,706 

    ID=792, getConnection 
    2014-01-23 15:50:16,704 
    2014-01-23 15:50:16,704 

    ID=793, getConnection 
    2014-01-23 15:50:16,704 
    2014-01-23 15:50:16,709 

    ID=794, getConnection 
    2014-01-23 15:50:16,708 
    2014-01-23 15:50:16,712 

我怎样才能做到这一点?请帮助

我需要如下图所示

ID=792, getConnection 2014-01-23 15:50:16,703 2014-01-23 15:50:16,706 

ID=792, getConnection 2014-01-23 15:50:16,704 2014-01-23 15:50:16,704 

ID=793, getConnection 2014-01-23 15:50:16,704 2014-01-23 15:50:16,709 

ID=794, getConnection 2014-01-23 15:50:16,708 2014-01-23 15:50:16,712 
+0

循环槽全部数量只是为了测试如果存在则不需要。您可以将所有数据存储在数组中并将其排序。 – Jotne

回答

1

管到tr删除换行符输出,如下图所示:

grep ID=$i: trace.log | grep getConnection | cut -d'[' -s -f1 | tr -d '\n' 
+1

另一个需要改变的地方是用'echo -n'ID = $ i,getConnection“>> time.log'代替。 – devnull

+0

如何引入两个字段之间的空间,2014-01-23 15:50:16和2014-01-23 15:50:16,706 –

+0

因为在'['之前有一个空格,所以您应该已经获得一个空格。 – dogbane

1

使用awk你可以通过改变这个节省一些命令:

grep ID=$i: trace.log | grep getConnection | cut -d'[' -s -f1 

发给自:

awk '$0~id && /getConnection/ {print $1,$2}' id=$i trace.log 
2014-01-23 15:50:41,724 
2014-01-23 15:50:41,733 

为什么不把awk做所有(使用数据):

awk -F" \\\[|=" '{split($3,i,":")} /getConnection REQUEST/ {r[i[1]]=$1} /getConnection DONE/ {d[i[1]]=$1} END {for (j in r) print "ID=" j " getConnection " r[j] "," d[j]}' file 
ID=1318 getConnection 2014-01-23 15:50:41,747, 
ID=1309 getConnection 2014-01-23 15:50:41,738, 
ID=1298 getConnection 2014-01-23 15:50:41,727,2014-01-23 15:50:41,733 
ID=1310 getConnection 2014-01-23 15:50:41,737, 
ID=1311 getConnection 2014-01-23 15:50:41,738,2014-01-23 15:50:41,744 
ID=1313 getConnection 2014-01-23 15:50:41,734,2014-01-23 15:50:41,734 
ID=1304 getConnection 2014-01-23 15:50:41,725, 
ID=1315 getConnection 2014-01-23 15:50:41,743, 
ID=1307 getConnection 2014-01-23 15:50:41,727, 
ID=1308 getConnection 2014-01-23 15:50:41,724,2014-01-23 15:50:41,733 

一些变化版本,并加入sort

awk -F" \\\[|=" '{split($3,i,":")} g {/DONE/?d[i[1]]=$1:r[i[1]]=$1} END {for (j in r) print "ID="j,g,r[j]","d[j]}' g="getConnection" file | sort -k1 
ID=1298 getConnection 2014-01-23 15:50:41,727,2014-01-23 15:50:41,733 
ID=1304 getConnection 2014-01-23 15:50:41,725, 
ID=1307 getConnection 2014-01-23 15:50:41,727, 
ID=1308 getConnection 2014-01-23 15:50:41,724,2014-01-23 15:50:41,733 
ID=1309 getConnection 2014-01-23 15:50:41,738, 
ID=1310 getConnection 2014-01-23 15:50:41,737, 
ID=1311 getConnection 2014-01-23 15:50:41,738,2014-01-23 15:50:41,744 
ID=1313 getConnection 2014-01-23 15:50:41,734,2014-01-23 15:50:41,734 
ID=1315 getConnection 2014-01-23 15:50:41,743, 
ID=1318 getConnection 2014-01-23 15:50:41,747,