我要求在Sed中使用一个衬垫,可以对具有以下数据的CSV文件进行原位编辑。我需要识别具有最低开始时间的唯一进程ID。并在此过程中找到流程的平均值。
以下数据示例,我需要输出为
9110089,12:59:00,计算(4.1916 + 38.5992 + 13.1219)/ 3,计算(6.702 + 50.619 + 8.49)/ 3
9199888,01:50:00,计算(3.7563 + 16.859)/ 2,计算(1.956 + 41.5076)/ 2
(注意:列之间输入的空格,仅用于说明)
数据
process start avg1 avg2
9110089, 14:59:00, 4.1916, 6.702
9110089, 12:59:00, 38.5992, 50.619
9110089, 19:50:00, 13.1219, 8.49
9199888, 10:50:00, 3.7563, 1.956
9199888, 01:50:00, 16.859, 41.5076
299889, 00:39:00, 14.947, 5.4813
299889, 00:39:00, 3.67, 3.17004
请给我一些指示,非常糟糕的一个衬垫。
答案 0 :(得分:1)
使用 datamash + 排序 + 剪切管道的解决方案:
datamash -ft, -g 1 mean 3 mean 4 < <(tail -n +2 yourfile | sort -t, -k1,2) | cut -d, -f1,2,5,6
输出:
299889,00:39:00,9.3085,4.32567
9110089,12:59:00,18.637566666667,21.937
9199888,01:50:00,10.30765,21.7318
其他 gawk 方法:
awk -F, 'NR<8{ a[$1]["avg1"]+=$3; a[$1]["avg2"]+=$4; c[$1]++; if(!($1 in t)) t[$1]=$2 }
END{ for(i in a) print i,t[i],a[i]["avg1"]/c[i],a[i]["avg2"]/c[i] }' OFS=',' \
<(sort -t, -k1,2 yourfile)
输出:
299889,00:39:00,9.3085,4.32567
9110089,12:59:00,18.6376,21.937
9199888,01:50:00,10.3077,21.7318