这种单行代码无需预先排序即可从文本输入中删除重复的行。
例如:
$ cat >f
q
w
e
w
r
$ awk '!a[$0]++' <f
q
w
e
r
$
我在互联网上找到的原始代码为:
awk '!_[$0]++'
这让我更加困惑,因为我_
在awk中有特殊的含义,就像在Perl中一样,但事实证明,这只是数组的名称。
现在,我了解了单线背后的逻辑: 每条输入行都用作哈希数组中的键,因此,完成后,哈希按到达顺序包含唯一的行。
我想学习的是awk如何准确地解释此表示法。例如,爆炸符号(!
)的含义以及此代码段的其他元素。
它是如何工作的?
标题具有误导性,应为$ 0(零),而不是$ o(o)。
—
Archemar 2014年
由于是哈希,它是无序的,因此“按到达顺序”实际上是不正确的。
—
凯文(Kevin)