我学到了非常方便的方法,以消除重复的行保留从订单删除重复项不排序文件- BASH 。
也就是说,如果你有以下文件,
$cat file
a
a
b
b
a
c
您可以使用以下方法来删除重复的线路:
$awk '!x[$1]++' file
a
b
c
这是如何工作的业务优先级方面?
我学到了非常方便的方法,以消除重复的行保留从订单删除重复项不排序文件- 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
。