有人可以帮我格式化下面的文件(file_origin)和awk程序到下面的文件结果(file_result),谢谢。
file_origin:
2017-11-11 09:01:12,m02occ3,transactions.tps,692
2017-11-11 09:01:12,m04occ1,transactions.tps,710
2017-11-11 09:01:12,m07occ4,transactions.tps,688
2017-11-11 09:01:12,m10occ2,transactions.tps,714
2017-11-11 09:06:12,m02occ3,transaction.tps,704
2017-11-11 09:06:12,m04occ1,transaction.tps,714
2017-11-11 09:06:12,m07occ4,transactions.tps,702
2017-11-11 09:06:12,m10occ2,transaction.tps,732
2017-11-11 09:11:12,m02occ3,transactions.tps,708
2017-11-11 09:11:12,m04occ1,transactions.tps,729
2017-11-11 09:11:12,m07occ4,transactions.tps,705
2017-11-11 09:11:12,m10occ2,transactions.tps,726
2017-11-11 09:16:12,m02occ3,transaction.tps,716
2017-11-11 09:16:12,m04occ1,transactions.tps,733
2017-11-11 09:16:12,m07occ4,transactions.tps,716
2017-11-11 09:16:12,m10occ2,transactions.tps,734
2017-11-11 09:21:12,m02occ3,transactions.tps,719
2017-11-11 09:21:12,m04occ1,transactions.tps,745
2017-11-11 09:21:12,m07occ4,transactions.tps,724
2017-11-11 09:21:12,m10occ2,transactions.tps,745
file_result:
2017-11-11 09:01:12,m02occ3,m04occ1,m07occ4,m10occ2,692,710,688,714
2017-11-11 09:06:12,m02occ3,m04occ1,m07occ4,m10occ2,704,714,702,732
2017-11-11 09:11:12,m02occ3,m04occ1,m07occ4,m10occ2,708,729,705,726
2017-11-11 09:16:12,m02occ3,m04occ1,m07occ4,m10occ2,716,733,716,734
2017-11-11 09:21:12,m02occ3,m04occ1,m07occ4,m10occ2,719,745,724,745
答案 0 :(得分:1)
awk
救援!
$ awk -F, '{if($1 in a) {a[$1]=a[$1] FS $2; b[$1]=b[$1] FS $NF}
else {a[$1]=$2; b[$1]=$NF}}
END {for(k in a) print k FS a[k] FS b[k]}'
通过连接每个关键字段(第一个字段)的第二个字段和最后字段来构造两个列表。完成后,按键打印。连接需要对第一个字段进行不同的处理(我们希望字段分隔符少于连接的字段数),这就是检查($1 in a)
作为学习经验,您可以删除else
阻止和if()
条件,只需使用if语句并观察效果。
答案 1 :(得分:0)
我还没有测试过,但可以按照以下方式进行测试:
假设(根据您提供的数据和示例)
注意:getline函数将读取下一行
代码:
awk '{
v_date=$1;
v1=$4;
getline;
v2=$4;
getline;
v3=$4;
getline;
v4=$4;
print v_date ",m02occ3,m04occ1,m07occ4,m10occ2," v1 "," v2 "," v3 "," v4;
}'