【发布时间】:2018-02-16 22:02:40
【问题描述】:
我正在尝试使用 Linux 中的 sed、awk、粘贴命令将特定日志文件转换为 CSV 文件,以便能够使用 gnuplot 或 MS Excel 对其进行绘图。但是,我无法以我想要的方式做到这一点。这是示例日志文件:
Feb 15 13:57:08 Program1: The pool size: 100 [High: 80 Norm: 20 Low: 0]
Feb 15 13:58:53 Program1: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 13:58:54 Program3: The pool size: 200 [High: 0 Norm: 200 Low: 0]
Feb 15 13:58:56 Program4: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 13:58:58 Program1: The pool size: 200 [High: 0 Norm: 200 Low: 0]
Feb 15 13:58:59 Program5: The pool size: 300 [High: 100 Norm: 200 Low: 0]
Feb 15 13:59:05 Program1: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 14:00:11 Program2: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 14:00:12 Program2: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 14:00:13 Program1: The pool size: 200 [High: 0 Norm: 200 Low: 0]
Feb 15 14:00:16 Program4: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 14:00:17 Program2: The pool size: 100 [High: 50 Norm: 50 Low: 0]
Feb 15 14:02:28 Program5: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 14:02:31 Program1: The pool size: 100 [High: 0 Norm: 100 Low: 0]
Feb 15 14:11:01 Program1: The pool size: 100 [High: 0 Norm: 100 Low: 0]
我正在尝试将上述数据转换为 CSV 文件,以便在特定时间点获得数据。我期望的输出 CSV 应该是以下格式:
TimeStamp,Program1_Total,Program1_High,Program1_Norm,Program1_Low,Program2_Total,Program2_High,Program2_Norm,Program2_Low,Program3_Total,Program3_High,Program3_Norm,Program3_Low,Program4_Total,Program4_High,Program4_Norm,Program4_Low
Feb 15 13:57:08,100,80,20,0,0,0,0,0,0,0,0,0,0,0,0,0
Feb 15 13:58:53,100,0,100,0,0,0,0,0,0,0,0,0,0,0,0,0
...
...
我尝试了什么?
我尝试对特定程序进行 grepping,并通过以下方式创建特定于该程序的单独较小文件:
grep "Program1" sample.log > Program1.log
grep "Program2" sample.log > Program2.log
我尝试使用粘贴命令加入他们。但是,我无法弄清楚如何以更好的方式处理这些时间戳。
任何帮助将不胜感激。提前致谢。
【问题讨论】:
-
到目前为止你尝试过什么?您有正在编写的示例脚本吗?
-
您需要在输出中更加具体。看起来您希望将不同的行合并为一行。但是所有这些行的“TimeStamp”都不同,你期望什么?
-
@StefanM 我希望日志文件中存在的每个唯一时间戳都有一个唯一行。如果您当时没有该程序的任何数据,请对该程序的数据填零。
-
请更改输入数据,然后。因为您没有重复的时间戳,所以结果不会令人满意。仍然:到目前为止,您尝试过什么?
-
@StefanM 可能有也可能没有重复的时间戳。假设是这样。我怎样才能做到这一点?