awkコードの説明

awkコードの説明

コマンドライン履歴を含むHistory.txtファイルから重複エントリを削除するコード。

BEGIN{
      if (data[$0]++ == 0)
         lines[++count] = $0;
     }
END {
     for(i=1; i<count; i++)
         print lines[i];
    }

dataコードには何があり、なぜと比較されますか0

ベストアンサー1

これは入力の一意の行を記憶するためのものです。

Jeff Schallerが指摘したように、$0ブロックに定義されていません。BEGIN

より正確なコードは

{
      if (data[$0]++ == 0)
         lines[++count] = $0;
     }
END {
     for(i=1; i<count; i++)
         print lines[i];
    }

でも

!data[$0]++ { lines[++count] = $0; }
END {
     for(i=1; i<count; i++)
         print lines[i];
    }

行の最初の出現はdata[$0]ゼロに等しく、対応するline[ ]行が受信されます。

テスト後はdata[$0]増加し(++例後増加)、同じ内容の行に対してテストはfalseと評価されます。

このENDステートメントはすべての行を順番に印刷します。

また、見ることができますawk '!a[$0]++' はどのように機能しますか?

おすすめ記事