不读取awk命令文件中的第一行文件
我的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;
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