这是我第一次看到这种用法。不幸的是,我找不到相关信息。
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
以上仅是示例。请注意,这不是一个$
,而是一个$$
答案 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}'