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

时间:2014-12-09 20:59:27

标签: awk command

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

脚本:

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

2 个答案:

答案 0 :(得分:3)

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

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

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

之后的行

答案 1 :(得分: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 -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