ファイルを並べ替えずに重複を削除する-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ます。