如何使用awk查找最大和最小数字?
我试图在一列中找出最大和最小的数字。输出应具有最大和最小数字以及最大和最小数字的名称 我写的awk代码如下:如何使用awk查找最大和最小数字?,awk,compare,Awk,Compare,我试图在一列中找出最大和最小的数字。输出应具有最大和最小数字以及最大和最小数字的名称 我写的awk代码如下: BEGIN{first=1;} {if (first) { max = min = $2; first = 0; next;} if (max < $2) max=$2 cmax=$1 ; if (min > $2) min=$2 cmin=$1; } END { print cmin min \n cmax max } BEGIN{first=1;}
BEGIN{first=1;}
{if (first) { max = min = $2; first = 0; next;}
if (max < $2) max=$2 cmax=$1 ; if (min > $2) min=$2 cmin=$1; }
END { print cmin min \n cmax max }
BEGIN{first=1;}
{if(first){max=min=2;first=0;next;}
如果(最大值<$2)最大值=$2 cmax=$1;如果(最小值>$2)最小值=$2 cmin=$1;}
结束{print cmin min\n cmax max}
你能帮我指出这段代码有什么问题吗?问题是行
if(max<$2)max=$2cmax=$1
和if(min>$2)min=$2cmin=$1
应该是if(max<$2){max=$2;cmax=$1}
和if(min>$2){min=$2;cmin=$1}
。另一个错误是行print cmin min\n cmax max
,它至少应该是print cmin min“\n”cmax max
。当您对代码进行更好的格式化时,很容易发现错误:
BEGIN{
first=1
}
{
if (first) { # We should move this to it's own block and test against NR
max = min = $2
first = 0
next
}
if (max < $2) { # confusing using max to store min
max=$2
cmax=$1
}
if (min > $2) { # and min to store max your operators are the wrong way round
min=$2
cmin=$1
}
}
END {
print cmin min "\n" cmax max
}
如果您编辑问题以提供示例输入、该示例的预期输出以及当前输出或错误消息,将非常有用。祝你好运。谢谢你,非常有用的回复。goofy edge case,但如果文件为空,则在printf中使用%d而不是%s作为数字不会有任何影响。您可能还想在printf的末尾添加一个“\n”(我没有检查OP想要什么)。您也可以进行创造性测试,以确定cmin是否为“”,如果是,则打印“NaN”或其他内容。这取决于你的投资程度!
NR==1{ # If we are on the first line in the file
min=max=$2 # Set initial min/max values
next # Skip to next line
}
{
if ($2 > max) { # If the value in field 2 is greater than current max
max=$2 # Store the new values
cmax=$1
}
if ($2 < min) { # If the value in field 2 is less than current min
min=$2 # Store the new values
cmin=$1
}
}
END {
# Use printf to properly format the output
printf "%s %d\n%s %d\n",cmin,min,cmax,max
}
sort -nk2 file | awk 'NR==1{print}END{print}'