AWK 可以读取输入数据和对其进行排序、并且可以操作数据并进行复杂的模式匹配。
如果学习AWK是为了分析trace文件,我的建议是找一下别人的源代码看,边看边学,这样会很快。
这是我按照网上找的例子,改写的获取网络延时的例子。
BEGIN {
highest_uid = 0;}
{
event = $1;
time = $2;
node_nb = $3;
node_nb=substr(node_nb,2,1);
trace_type = $4;
flag = $5;
uid = $6;
pkt_type = $7;
pkt_size = $8;
if ( event=="s" && node_nb==0 && pkt_type=="cbr" && uid > highest_uid && trace_type=="AGT")
{ highest_uid = uid; }
if ( event=="s" && node_nb==0 && pkt_type=="cbr" && uid==highest_uid && trace_type=="AGT" )
start_time[uid] = time;
if ( event=="r" && node_nb ==2 && pkt_type=="cbr" && uid==highest_uid && trace_type=="AGT" )
end_time[uid] = time;
}
END {
for ( packet_id = 0; packet_id <= highest_uid; packet_id++ )
{
start = start_time[packet_id];
end = end_time[packet_id];
packet_duration = end - start;
if ( start < end ) printf("%d %f/n", packet_id, packet_duration);
}
}