我学到了一种非常方便的方法来删除重复行,保留从Remove duplicates without sorting file - BASH中的顺序。
说,如果你有以下文件,
$cat file
a
a
b
b
a
c
您可以使用以下内容删除重复的行:
$awk '!x[$1]++' file
a
b
c
这在操作优先级方面是如何工作的?
我学到了一种非常方便的方法来删除重复行,保留从Remove duplicates without sorting file - BASH中的顺序。
说,如果你有以下文件,
$cat file
a
a
b
b
a
c
您可以使用以下内容删除重复的行:
$awk '!x[$1]++' file
a
b
c
这在操作优先级方面是如何工作的?
表达式被解析为
!(x[$(1)]++)
所以,从内到外,它是:
$(1)
(注意这$
是 AWK 中的运算符,与 Perl 不同)。x
具有字段 1 值的索引;如果x
是未绑定变量,则将其绑定到新的关联数组。x[$(1)]
;应用类似于 C 中的规则,因此表达式的值是在增量之前的值,如果尚未分配值x[$(1)]
,它将为零。x[$(1)]
x[$(1)]
否定前一个的值,当为零时将产生真值。x[$(1)]
获得一个非零值。因此,下一次,x[$(1)]
对于相同的值,$(1)
将返回 1。然后对输入中的每一行计算这个表达式,并确定是否awk
应该执行隐含的默认操作,即将该行回显到stdout
.
在 AWK 中,数组是关联的,因此每行的第一列或第一个字段 ,$1
用作数组的索引x
。