使用 awk 命令尝试删除输入中的第一行

使用 awk 命令尝试删除输入中的第一行

以下是我的输入文件,结果一直返回“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,并分配max0BEGIN$2Votesmax<($2)max0Vmax字符串值 Votes

  • 对于后续行,$2是数字,但max现在是字符串,因此$2被转换为字符串,并且再次按字典顺序进行比较。假设 的V字典权重大于0到 的任何数字9V总是获胜。

顺便说一句,您的shebang看起来无效 - 它可能应该是

#!/usr/bin/awk -f

或者

#!/bin/awk -f

取决于你的 Ubuntu 版本。此外,像这样的赋值max_breed=$1在块中并没有真正意义BEGIN,因为它是在执行任何记录都已被处理。

相关内容