1

awk 通常使用 $1, $2 来指定列。假设有一个标题行,其中包含列的字段名称,有没有办法通过使用字段名称而不是列计数来指定列?

例如,对于这个文件

ID, Name, Salary
1, John, 100000

我可以使用 $ID、$Name、$Salary 之类的东西,而不是使用 $1、$2、$3...

当然,我知道没有直接使用 $ID 的方法。我只是好奇是否有类似且简单的方法。一些 csv 文件有 100 多列,使用字段名称会更容易。

4

1 回答 1

1

这个脚本取自由Janis Papanagnou编写的awk.info可能会有所帮助。

awk -F, -v cols="${1:?}" '
   BEGIN {
     n=split(cols,col)
     for (i=1; i<=n; i++) s[col[i]]=i
   }
   NR==1 {
     for (f=1; f<=NF; f++)
       if ($f in s) c[s[$f]]=f
     next
   }
   { sep=""
     for (f=1; f<=n; f++) {
       printf("%c%s",sep,$c[f])
       sep=FS
     }
     print ""
   }
'
于 2013-07-05T06:02:04.360 回答