awk: использовать имена полей в качестве спецификаторов столбцов

awk обычно использует $1, $2 для указания столбцов. Предположим, что есть строка заголовка с именами полей для столбцов, есть ли способ указать столбец, используя имена полей, а не количество столбцов?

например, для этого файла

ID, Name, Salary
1, John, 100000

вместо использования $1, $2, $3, могу ли я как-то использовать такие вещи, как $ID, $Name, $Salary...

Я, конечно, понимаю, что прямого способа использования $ID нет. Мне просто любопытно, есть ли аналогичный и простой способ. Некоторые CSV-файлы имеют более 100 столбцов, и использование имени поля значительно упрощает работу.


person Vendetta    schedule 05.07.2013    source источник


Ответы (1)


Этот сценарий взят с сайта 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 ""
   }
'
person jaypal singh    schedule 05.07.2013
comment
Спасибо за ответ. Что здесь означает cols=${1:?}? - person Vendetta; 06.07.2013