syslog 処理


AWK を 1 回に減らそうと思えば減らせるんだろうか、とか

awk 単独で処理するとこんな感じでしょうか?
なので、1 回に減らすことはできます。

  • gensub() と asort() が gawk 限定ですが、使っているのが Debian っぽいので、'apt-get install gawk' で入りますね。てか、何で Debian って mawk がデフォなんですかね。
  • awk の場合、asort() を使おうとすると (そうでなくても)、配列に格納していく必要があるので (ないかもしれないけど)、結果的に sort コマンドの方が良い気がします。
  • そういえば、'Jan' と 'Feb' だと 'Feb' が先に来るわけですが、これはこれで不自由かもしれません。
#! /usr/bin/gawk -f
{
    line[NR] = gensub(/\[[0-9]+\]/, "", "1", $5) " " $0;
}

END {
    asort(line);
    for (i = 1; i <= NR; i++) {
        split(line[i], a_line);
        if (prev != a_line[1]) {
            print "\n[" a_line[1] "]";
        }
        prev = a_line[1];
        sub(a_line[1], " ", line[i]);
        print line[i];
    }
}

AWK を 256 倍使う本」は個人的には好きなのですが、内容が結構古いです。
例えば、中に連接は sprintf() よりも遅いと書かれていたような気がしますが、今は改善されて連接も高速で動作してくれます。

最新の「AWK を 1024 倍使う」じゃないけれど、OSC2008 でいろいろな新機能を紹介できればと思っています。

AWKを256倍使うための本 (Ascii 256倍)

AWKを256倍使うための本 (Ascii 256倍)