awk:使用字段名称作为列说明符

时间:2013-07-05 05:35:17

标签: awk gawk

awk通常使用$ 1,$ 2来指定列。假设有一个带有字段名称的标题行,是否有办法使用字段名称而不是列数来指定列?

例如,对于这个文件

ID, Name, Salary
1, John, 100000

而不是使用$ 1,$ 2,$ 3,我可以以某种方式使用$ ID,$ Name,$ Salary ......

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

1 个答案:

答案 0 :(得分: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 ""
   }
'