不读取awk命令文件中的第一行文件

不读取awk命令文件中的第一行文件,awk,command,Awk,Command,我的awk命令列表无法读取数据文件的第一行。它必须读取除第一行之外的每一行,然后将运动员和年份连接成一个字符串。后来在程序中我使用了一个数组,我没有列出所有的代码。下面列出了数据文件的前两行。我需要让它不读标题线,只从第一个运动员开始。这方面的任何帮助都会很好 脚本: BEGIN{ FS="," cnt=0; sum=0; } { name=$1 year=$4 ayStr = name "," " " year 在处理文件行的块之前使用NR>1: BEGIN { FS="," cnt=0;

我的awk命令列表无法读取数据文件的第一行。它必须读取除第一行之外的每一行,然后将运动员和年份连接成一个字符串。后来在程序中我使用了一个数组,我没有列出所有的代码。下面列出了数据文件的前两行。我需要让它不读标题线,只从第一个运动员开始。这方面的任何帮助都会很好

脚本:

BEGIN{
FS=","
cnt=0; sum=0;
}
{
name=$1
year=$4
ayStr = name "," " " year

在处理文件行的块之前使用
NR>1

BEGIN {
FS=","
cnt=0; sum=0;
}
NR > 1 {
name=$1
year=$4
ayStr = name "," " " year

NR
是文件中的行号,因此它只处理1

之后的行,正如@Barmar提到的,您可以测试
NR>1
跳过第一行,但既然可以使用它,为什么要跳过它呢?改为这样做,您不需要硬编码脚本中的字段号,只需通过第一行上的值访问它们:

$ cat tst.awk
BEGIN{ FS="," }

NR==1 {
    for (i=1;i<=NF;i++) {
        f[$i] = i
    }
    next
}

{
    ayStr = $(f["Athlete"]) ", " $(f["Year"])
    print ayStr

    print "----"

    for (name in f) {
        value = $(f[name])
        print name " = " value
    }
}

我尝试了这一点,现在当我调用awk命令文件时,它将打印文件的内容,而不打印第一行,然后打印我的结束块中的内容。此外,在结束块中打印我的数组时,它仍然包括第一行。我需要它来打印我的输出,而不是文件的内容。@xploit您描述的问题现在存在于您的脚本的某些部分,您没有向我们展示或告诉我们任何事情,因此我们无法帮助您。但是您没有按照@Barmar的建议去做,所以您当然仍然有问题。在行首使用不同数量的空格来缩进代码,这样更容易阅读,顺便说一句。我确实尝试过。它没有做我需要的事情。这就是为什么我没有在原始代码中发布它。但是它是对您特定问题的正确答案,因此如果它没有实现您想要的,那么要么您正确地实现了它,但您真正想要的与您到目前为止描述的不同,要么您没有正确地实现它。不管怎样,没有看到你做了什么,我们都帮不了你。此外,编辑您的问题,以显示您的预期输出加上您实际获得的输出。是否最好执行for循环,使它们处于正确的顺序?当前循环只是向OP显示存在哪些字段,我怀疑OP根本不需要在所有字段上进行循环,而是在代码的其余部分使用特定的命名字段。
$ awk -f tst.awk file
Yannick Agnel, 2012
----
Silver Medals = 1
Total Medals = 3
Athlete = Yannick Agnel
Gold Medals = 2
Closing Ceremony Date = 8/12/2012
Year = 2012
Age = 20
Bronze Medals = 0
Sport = Swimming
Country = France