此功能是什么意思?函数$$ 1

时间:2019-06-24 09:23:53

标签: awk

这是我第一次看到这种用法。不幸的是,我找不到相关信息。

awk '{print $$1}'

$$1的作用是什么?是数组吗?

$ echo -e "2 2 3 4\n2 22 3 4 5 6\na 2 3" | awk '{print $$1}'
2
22
a 2 3
$ echo -e "2 2 3 4\n2 22 3 4 5 6\na 2 3" | awk '{print $$2}'
2

2
$ echo -e "2 2 3 4\n2 22 3 4 5 6\na 2 3" | awk '{print $$3}'
3
3
3

以上仅是示例。请注意,这不是一个$,而是一个$$

1 个答案:

答案 0 :(得分:5)

  

间接字段寻址

$($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}'