文本文件重新格式化为文本文件

文本文件重新格式化为文本文件

awk如何使用shell 脚本将下面的日志文件转换为底部的输出文件。

输入文件格式如下:

zzz ***Fri 27 March 2017 01:21:00 EST
Device: C1  C2  C3
R1  1   2   3   
R2  4   5   6
R3  7   8   9

zzz ***Fri 27 March 2017 01:22:00 EST
Device: C1  C2  C3
R1  11  12  13  
R2  14  15  16
R3  17  18  19

输出文件格式:

Timestamp         R1-C1  R1-C2 R1-C3 R2-C1 R2-C2 R2-C3 R3-C1 R3-C2 R3-C3
03/08/17 01:21:00  1      2      3     4     5     6     7     8     9 
03/08/17 01:22:00 11     12     13    14    15    16    17    18    19

答案1

这应该可以帮助您开始:

BEGIN {
    split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", mon);
    for (i = 1; i <= 12; i++) {
        month[mon[i]] = i;
    }
}
/zzz/ {
    ts = sprintf("%d-%02d-%d %s", $5, month[substr($4, 1, 3)], $3, $6); next;
}
/Device/ {
    printf("%s", ts); next;
}
length($0) == 0 {
    print; next;
}
{
    for (i = 2; i <= NF; i++) {
        printf("%5d", $i);
    }
}

END { print ""; }

添加标题和将时间戳转换为愚蠢的格式留给读者作为练习。

相关内容