如何在gnuplot中读取12h(AM / PM)时间格式

时间:2014-07-22 11:34:54

标签: time format gnuplot

我想通过使用现有和自动生成的数据文件生成一些不错的图表。不幸的是我无法改变文件的格式。

这些行包含时间戳和值。 e.g。

July 06, 2014 at 12:46PM 84.6

在Gnuplot中,我可以使用给定的格式标识符来读取时间戳。但是没有可能在AM或PM时间之间分开。

set timefmt "%B %d, %Y at %H:%M"

有关此问题的任何建议吗?

1 个答案:

答案 0 :(得分:3)

以下awk脚本将格式化您的文件:

awk '{time = $5; if(substr(time,6,2) == "PM" \
&& substr(time,1,2) < 12) add = 12; else add = 0; \
$5 = substr(time,1,2)+add "" substr(time,3,3); \
print $0}' data

这样

July 06, 2014 at 10:46AM 83.6
July 06, 2014 at 12:46PM 84.6
July 06, 2014 at 10:46PM 85.6

看起来像

July 06, 2014 at 10:46 83.6
July 06, 2014 at 12:46 84.6
July 06, 2014 at 22:46 85.6

在gnuplot中,您可以在绘制文件时动态执行此操作。你可以这样做(注意我需要逃避"):

set timefmt "%B %d, %Y at %H:%M"
set xdata time
set format x "%H:%M"
plot "< awk '{time = $5; if(substr(time,6,2) == \"PM\" \
&& substr(time,1,2) < 12) add = 12; else add = 0; \
$5 = substr(time,1,2)+add \"\" substr(time,3,3); \
print $0}' data" u 1:6 w l

enter image description here

注意我假设00:15是00:15 AM。如果您的输出是上午12:15,那么您需要相应地修改脚本。这些方面的东西:

if(substr(time,6,2) == "AM" && substr(time,1,2) == 12) add = -12