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