如何用awk
我有这样的数据在这里跳过列字段:如何用awk
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
---------------------------------
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
假定有非负值ISAT有至少一个记录,如果不与c[i]>0
编辑:正如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的整个列,我只需要跳过负值。 – jshakil
@jshakil,现在试试我的编辑解决方案,让我知道如果一切都好? – RavinderSingh13
谢谢你的帮助,但@karakfa明白了。谢谢你们俩。 – jshakil
守卫打印请总是期望的输出添加到您的文章与代码标记。 – RavinderSingh13
我对此表示歉意,谢谢你告诉我。 – jshakil
@jshakil:单独第三列,'awk -v FS =“,”'($ 3 + 0)> 0 {sum + = $ 3;计数++} END {print(count!= 0)?(sum/count):0}'file' – Inian