如何从以下文件中找到以MATH开头的行的最大和最小a,b,c值?
TITLE a b c
MATH 12.3 -0.42 5.5
ENGLISH 70.45 3.21 6.63
MATH 3.32 2.43 9.42
MATH 3.91 -1.56 7.22
ENGLISH 89.21 4.66 5.32
它不能只是一个命令行。它必须是使用BEGIN函数和END的脚本文件。
我得到了错误的最小值,当我运行程序时,我最终得到一个字符串max。请帮忙!
以下是我的代码a:
BEGIN { x=1 }
{
if ($1 == "MATH") {
min=max=$2;
for ( i=0; i<=NF; i++) {
min = (min < $i ? min : $i)
max = (max > $i ? max : $i)
}
}
}
END { print "max a value is ", max, " min a value is ", min }
谢谢!
答案 0 :(得分:5)
此代码可以展示您想要的概念:
awk '$1!="MATH"{next}1;!i++{min=$2;max=$2;}{for(j=2;j<=NF;++j){min=(min<$j)?min:$j;max=(max>$j)?max:$j}}END{printf "Max value is %.2f. Min value is %.2f.\n", max, min}' file
输出:
MATH 12.3 -0.42 5.5
MATH 3.32 2.43 9.42
MATH 3.91 -1.56 7.22
Max value is 12.30. Min value is -1.56.
删除1
以取消消息:
awk '$1!="MATH"{next};...
脚本版本:
#!/usr/bin/awk
$1 != "MATH" {
# Move to next record if not about "MATH".
next
}
!i++ {
# Only does this on first match.
min = $2; max = $2
}
{
for (j = 2; j <= NF; ++j) {
min = (min < $j) ? min : $j
max = (max > $j) ? max : $j
}
}
END {
printf "Max value is %.2f. Min value is %.2f.\n", max, min
}
答案 1 :(得分:1)
查看你的for循环
它从i = 0开始,因此条件应为
i<NF
而不是
i<= NF
尝试以下行而不是那行......我希望你能得到你想要的东西
for(i=0;i<NF;i++){
休息一切看起来都很好....谢谢
答案 2 :(得分:1)
for循环中的i变量至少应以2(第2个字段)开头,而不是0,表示整行,并以NF结尾。
BEGIN { x=1;min=2147483647;max=-2147483648}
{
if ($1 == "MATH") {
for ( i=2; i<=NF; i++) {
min = (min < $i ? min : $i)
max = (max > $i ? max : $i)
}
}
}
END { print "max a value is ", max, " min a value is ", min }
使用命令运行:( testawk.script
表示上述awk脚本文件名,test.data
表示输入数据文件名
cat test.data | awk -f testawk.script
输出:
最大值为12.30分钟,值为-1.56
答案 3 :(得分:-2)
我现在没有方便的终端,但沿着这些线的东西将获得每条线中最小的。
cat YOURFILE | grep "^MATH" | cat test | \
while read CMD; do
A=`echo $CMD | awk '{ print $2 }'`
B=`echo $CMD | awk '{ print $3 }'`
C=`echo $CMD | awk '{ print $4 }'`
#IF Statement for comparing the three of them
#echo the smallest
done