Bash 如何使用awk跳过列中的字段

Bash 如何使用awk跳过列中的字段,bash,shell,awk,terminal,scripting,Bash,Shell,Awk,Terminal,Scripting,我这里有这些数据: 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),因为它是负数 如何跳

我这里有这些数据:

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),因为它是负数

如何跳过该特定值并使所有字段在第一列中相加

我知道下一个命令将跳过整行,是否有一个命令将跳过特定字段

多谢各位

编辑

对不起。下面是输出的样子,我已经有了测试2和测试3的平均值,只需要帮助获得测试1的平均值

Average for Test 1: 5
Average for Test 2: 15.75
Average for Test 3: 22.125
---------------------------------

编辑:正如OP所说,他需要对字段中的负值求反,所以现在就提供解决方案

awk -F, 'FNR==1{print;next} {for(i=1;i<=NF;i++){printf("%s%s",$i<0?"":$i,i==NF?RS:",")}}'   Input_file

编辑:正如OP所说,他需要对字段中的负值求反,所以现在就提供解决方案

awk -F, 'FNR==1{print;next} {for(i=1;i<=NF;i++){printf("%s%s",$i<0?"":$i,i==NF?RS:",")}}'   Input_file

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
$awk-F,'NR>1{for(i=3;i=0){s[i]+=$i;c[i]+}

结束{(i=3;i
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
$awk-F,'NR>1{for(i=3;i=0){s[i]+=$i;c[i]+}

END{for(i=3;i请始终使用代码标记将预期的输出添加到您的帖子中。对此我深表歉意,谢谢您告诉我。@jshakil:仅第三列,
awk-v FS=“,”($3+0)>0{sum+=$3;count++}END{print(count!=0)?(sum/count):0}'文件
请始终使用代码标记将预期输出添加到您的帖子中。对此我深表歉意,谢谢您告诉我。@jshakil:仅第三列,
awk-v FS=“,”($3+0)>0{sum+=$3;count++}END{print(count!=0)?(sum/count):0}'文件