Apache のアクセスログを TSV に変換する

setbuf 重要. stdout に fflush するのは初めてだw

#include <stdio.h>

int main() {
    int c;
    int q = 0;
    int b = 0;
    char buf[BUFSIZ];
    setbuf(stdout, buf);
    while ((c = getchar()) != EOF) {
        switch (c) {
            case ' ':
            case '[':
            case ']':
            case '"':
                if ((c == ' ') && !q && !b) {
                    putchar('\t');
                } else if ((c == '[') && !q) {
                    b = 1;
                } else if ((c == ']') && !q) {
                    b = 0;
                } else if (c == '"') {
                    q = !q;
                } else {
                    putchar(c);
                }
                break;
            default:
                putchar(c);
        }
    }
    fflush(stdout);
    return 0;
}