以下是我的输入文件,结果一直返回“Breed 有 Votes 投票”
Breed, Votes
Black Lab, 30
Chihuahua, 2
Pug, 1
Corgi, 45
Shar Pei, 21
Shih Tzu, 5
Maltese, 7
#!/bin/sh/awk
##comment The below awk script runs on the file dog_breed.txt, FS refers to field separator which is a comma in this case. We initialize our max variable to 0 and max_breed to the first breed, then iterate over the rows to find the max voted breed.
BEGIN{
FS=", "
max=0;
max_breed=$1
}
{
if(max<($2)){
max=$2;
max_breed=$1;
}
}
END{
print max_breed " has " max " votes"
}
答案1
您可以通过添加规则到块:
NR > 1 {
if(max<($2)){
max=$2;
max_breed=$1;
}
}
然而,值得尝试去理解为什么你会得到这样的结果不排除第一行-这是因为:
当 时,的
NR==1
值为(数字 - 在块中分配),但的值为(字符串)。因此,表达式转换为字符串并执行字典顺序比较。如果小于您所在语言环境中的 ,则结果为 TRUE,并分配max
0
BEGIN
$2
Votes
max<($2)
max
0
V
max
字符串值Votes
对于后续行,
$2
是数字,但max
现在是字符串,因此$2
被转换为字符串,并且再次按字典顺序进行比较。假设 的V
字典权重大于0
到 的任何数字9
,V
总是获胜。
顺便说一句,您的shebang看起来无效 - 它可能应该是
#!/usr/bin/awk -f
或者
#!/bin/awk -f
取决于你的 Ubuntu 版本。此外,像这样的赋值max_breed=$1
在块中并没有真正意义BEGIN
,因为它是在执行前任何记录都已被处理。