1

awk は通常、$1、$2 を使用して列を指定します。列のフィールド名を含むヘッダー行があるとします。列数ではなく、フィールド名を使用して列を指定する方法はありますか?

たとえば、このファイルの場合

ID, Name, Salary
1, John, 100000

$1、$2、$3 を使用する代わりに、$ID、$Name、$Salary などを使用できますか...

もちろん、$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 に答える