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;iawk
救援
$ 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}'文件