ファイルを並べ替えずに重複を削除する-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)
注意してください)。$
x
フィールド1の値でインデックスを作成します。x
が非バインド変数の場合は、新しい連想配列にバインドします。x[$(1)]
; Cのルールと同様のルールが適用されるため、式の値は増分前の値になります。値がまだ割り当てられていないx[$(1)]
場合はゼロになります。x[$(1)]
x[$(1)]
がゼロのときに真理が得られます。x[$(1)]
実際には、ゼロ以外の値を取得するように増分を実行します。したがって、次回はx[$(1)]
、の同じ値に対して$(1)
1を返します。次に、この式は入力のすべての行に対して評価され、の暗黙のデフォルトアクションをawk
実行する必要があるかどうかを判断します。これは、行をにエコーすることstdout
です。
AWK 配列は連想配列であるため、各行の最初の列または最初のフィールド が$1
配列のインデックスとして使用されx
ます。