Косвенная полевая адресация
Посмотрите на это как на это $($1)
.
Таким образом, для второй строки 2 22 3 4 5 6
эта команда awk '{print $$1}'
будет выглядеть как $1
(первое поле). Он содержит значение 2, тогда результат будет $2
(второе поле), поэтому результат $$1
будет 22
. $$1
возьмет номер из поля # 1 ($1
) и использует его в качестве номера поля для внешнего $
.
Пример:
$ echo -e "1 b c d\n2 b c d\n3 b c d\n4 b c d"
1 b c d
2 b c d
3 b c d
4 b c d
Тогда:
$ echo -e "1 b c d\n2 b c d\n3 b c d\n4 b c d" | awk '{print $$1}'
1 # since filed #1=1 result print first field
b # since filed #1=2 result print secondfield
c # since filed #1=3 result print third field
d # since filed #1=4 result print fourth field
Редактировать
Как указывает @kvantour, вы можете добавлять сколько угодно $, сколько захотите
awk '{print $$$1}' = awk '{print $$($1)}' = awk '{print $($($1))}'
И, как указывает @Ed, вы можете сделать его более читабельным, развернув его так:
awk '{print $$1}' = awk '{fieldNr=$1; print $fieldNr}'