2013-07-05 27 views
1

awk通常使用$ 1,$ 2来指定列。假设有一个包含字段名称的标题行,是否有方法通过使用字段名称来指定列,而不是列计数?awk:使用字段名称作为列说明符

例如,对于这个文件

ID, Name, Salary 
1, John, 100000 

,而不是使用$ 1,$ 2,$ 3,我可以以某种方式使用之类的东西$ ID,$名称,$薪水......

当然,我理解没有使用$ ID的直接方式。我只是好奇,如果有一个类似和简单的方法。一些csv文件有100多列,使用字段名称可以更容易。

回答

1

awk.info采取此脚本通过詹尼斯Papanagnou着可能的帮助。

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 "" 
    } 
' 
+0

感谢您的回复。 “cols =”$ {1:?}“是什么意思? – CodeNoob

相关问题