这种单行从文本输入中删除重复的行,无需预先排序。
例如:
$ cat >f
q
w
e
w
r
$ awk '!a[$0]++' <f
q
w
e
r
$
Run Code Online (Sandbox Code Playgroud)
我在互联网上找到的原始代码如下:
awk '!_[$0]++'
这让我更加困惑,因为我认为_
awk 中有一个特殊的含义,就像在 Perl 中一样,但结果证明它只是一个数组的名称。
现在,我理解了单行背后的逻辑: 每个输入行都用作散列数组中的键,因此,在完成后,散列包含按到达顺序排列的唯一行。
我想了解的是 awk 究竟是如何解释这个符号的。例如,爆炸符号 ( !
) 的含义以及此代码片段的其他元素。
它是如何工作的?