我在这里有这些数据:
Name,Team,First Test, Second Test, Third Test
Tom,Red,5,17,22
Joe,Green,3,14,22
Maria,Blue,6,18,21
Fred,Blue,2,15,23
Carlos,Red,-1,15,24
Phuong,Green,7,19,21
Enrique,Green,3,16,20
Nancy,Red,9,12,24
我想跳过第6行的第3场($ 3),因为我发现第一次测试的平均值是因为它是负数。
我如何跳过该特定值并将所有字段仍添加到第一列?
我知道下一个命令跳过整行,是否有一个跳过特定字段的命令?
谢谢。
修改
对不起。以下是输出的样子,我已经有了测试二和三的平均值,只需要测试一下的平均值。
Average for Test 1: 5
Average for Test 2: 15.75
Average for Test 3: 22.125
---------------------------------
答案 0 :(得分:1)
编辑:OP告诉他需要否定字段中的负值,以便现在提供该解决方案。
awk -F, 'FNR==1{print;next} {for(i=1;i<=NF;i++){printf("%s%s",$i<0?"":$i,i==NF?RS:",")}}' Input_file
输出如下。
Name,Team,First Test, Second Test, Third Test
Tom,Red,5,17,22
Joe,Green,3,14,22
Maria,Blue,6,18,21
Fred,Blue,2,15,23
Carlos,Red,,15,24
Phuong,Green,7,19,21
Enrique,Green,3,16,20
Nancy,Red,9,12,24
答案 1 :(得分:1)
awk
救援!
$ awk -F, 'NR>1 {for(i=3;i<=NF;i++) if($i>=0) {s[i]+=$i; c[i]++}}
END {for(i=3;i<=NF;i++) print "Average for Test " (i-2) ": " s[i]/c[i]}' file
Average for Test 1: 5
Average for Test 2: 15.75
Average for Test 3: 22.125
假设至少有一条记录具有非负值,如果没有使用c[i]>0
保护打印