1

我有一个检测日志文件,其中有 6 行重复的第一列,如下所示。

//SC001@1/1/1@1/1,get,ClientStart,1363178707755
//SC001@1/1/1@1/1,get,TalkToSocketStart,1363178707760
//SC001@1/1/1@1/1,get,DecodeRequest,1363178707765
//SC001@1/1/1@1/1,get-reply,EncodeReponse,1363178707767
//SC001@1/1/1@1/2,get,DecodeRequest,1363178708765
//SC001@1/1/1@1/2,get-reply,EncodeReponse,1363178708767
//SC001@1/1/1@1/2,get,TalkToSocketEnd,1363178708770
//SC001@1/1/1@1/2,get,ClientEnd,1363178708775
//SC001@1/1/1@1/1,get,TalkToSocketEnd,1363178707770
//SC001@1/1/1@1/1,get,ClientEnd,1363178707775
//SC001@1/1/1@1/2,get,ClientStart,1363178708755
//SC001@1/1/1@1/2,get,TalkToSocketStart,1363178708760

注意:,(逗号)是这里的分隔符

同样,日志文件中有许多重复的第一列值 (ID)(上面的示例只有两个值 (ID);//SC001@1/1/1@1/1 和 //SC001@1/1/1 @1/2)我需要按照以下格式合并日志记录。

ID,ClientStart,TalkToSocketStart,DecodeRequest,EncodeReponse,TalkToSocketEnd,ClientEnd

//SC001@1/1/1@1/1,1363178707755,1363178707760,1363178707765,1363178707767,1363178707770,1363178707775
//SC001@1/1/1@1/2,1363178708755,1363178708760,1363178708765,1363178708767,1363178708770,1363178708775

我想有一个用于此练习的 bash 脚本,并感谢专家对此的支持。希望可能有更有效的 sed 或 awk 解决方案。

非常感谢

4

1 回答 1

1

单程:

sort -t, -k4n,4 file | awk -F, '{a[$1]=a[$1]?a[$1] FS $NF:$NF;}END{for(i in a){print i","a[i];}}'

sort命令根据最后(第 4)列对文件进行排序。awk接受排序后的输入并形成一个数组,其中第一个字段是键,值是最后一列的值的组合。

于 2013-04-18T11:58:32.390 回答