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 ""; }
添加标题和将时间戳转换为愚蠢的格式留给读者作为练习。