解释这种重复的行删除,为了固定,单行AWK命令(Explain this duplicate lin

2019-06-25 01:33发布

我学到了非常方便的方法,以消除重复的行保留从订单删除重复项不排序文件- BASH

也就是说,如果你有以下文件,

$cat file
a
a
b
b
a
c

您可以使用以下方法来删除重复的线路:

$awk '!x[$1]++' file
a
b
c

这是如何工作的业务优先级方面?

Answer 1:

表达被解析为

!(x[$(1)]++)

所以,从内到外,它是:

  • 就拿当前输入行的字段1, $(1)注意: $是AWK的操作,不像在Perl)。
  • 索引x与场1的值; 如果x是一个未绑定变量,将其绑定到一个新的关联数组。
  • 后递增x[$(1)] ; 一个类似于在C规则适用,所以表达式的值是, x[$(1)]之前的增量,这将是零,如果x[$(1)]还没有被分配的值。
  • 否定先前的值,这将产生真理当x[$(1)]是零。
  • 其实做增量,使x[$(1)]得到一个非零值。 所以,接下来的时间, x[$(1)]为相同的值$(1)将返回1。

然后,该表达式求在输入的每一行,并且确定的隐含默认动作是否awk应执行,这是为了呼应线到stdout



Answer 2:

在AWK阵列是结合的,所以在第一列或每行的第一个字段, $1 ,被用作阵列的索引x



文章来源: Explain this duplicate line removing, order retaining, one-line AWK command