我无法进行此操作,因此我的awk命令列表不会读取数据文件的第一行。它必须读取除第一行之外的每一行,然后将运动员和年份连接成一个字符串。在程序的后面我使用了一个数组,我没有列出所有的代码。下面列出了数据文件的前两行。我需要这样做,所以它不会读取标题行,只能从第一个运动员开始。任何有关这方面的帮助都会很棒!
脚本:
BEGIN{
FS=","
cnt=0; sum=0;
}
{
name=$1
year=$4
ayStr = name "," " " year
答案 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