gnuplot格式时间戳日期和时间AM PM带awk

gnuplot格式时间戳日期和时间AM PM带awk,awk,timestamp,gnuplot,Awk,Timestamp,Gnuplot,sombody能否帮助我使用awk格式化gnuplot的以下时间戳: Jul 9, 2020 11:59:59 AM Jul 9, 2020 12:00:00 PM Jul 9, 2020 1:22:24 PM 我一直在尝试修改前一篇文章中显示的代码示例,但它对我不起作用 plot "< awk '{time = $4; if(substr($5,1,2) == PM \ && substr(time,1,2) < 12) add = 12; else a

sombody能否帮助我使用awk格式化gnuplot的以下时间戳:

Jul 9, 2020 11:59:59 AM
Jul 9, 2020 12:00:00 PM
Jul 9, 2020 1:22:24 PM
我一直在尝试修改前一篇文章中显示的代码示例,但它对我不起作用

plot "< awk '{time = $4; if(substr($5,1,2) == PM \
&& substr(time,1,2) < 12) add = 12; else add = 0; \
$4 = substr(time,1,2)+add "" substr(time,3,6); \
print $0}' Test.csv" using 1:9
plot“
我总是从gnuplot得到“x范围无效”错误。我在编码方面完全是个初学者

这里回答了一个类似的问题: 但是我不能用代码来解决我的问题


提前感谢

如果可以使用gnuplot,为什么要使用awk? 一般来说,这种AM/PM时间格式非常痛苦。 据我所知,gnuplot 5.2不能读取AM/PM时间作为输入,但我想它应该在新版本中实现

下面的代码在此基础上稍作修改: 也许,它仍然可以简化一点。将数据转换为合理的格式,转换为
$Data2
,然后进行打印

代码:

### time formatting with AM/PM
reset session

$Data <<EOD
Jul 9, 2020  12:22:24 AM    1.23
Jul 9, 2020  11:59:59 AM    2.34
Jul 9, 2020  12:00:00 PM    3.45
Jul 9, 2020   1:22:24 PM    4.56
Jul 10, 2020  1:22:24 PM    5.67
EOD

myTimeFmt12a = "%b %d, %Y"
myTimeFmt12b = "%H:%M:%S"
myTimeFmt24 = "%d.%m.%Y %H:%M:%S"

# change 12h am/pm format to 24h format
myTime12to24(t,p) = t+12*3600*(floor(t/3600)<12 && (p eq "PM" || p eq "pm") ? \
                    1 : floor(t/3600)==12 && (p eq "AM" || p eq "am")  ? -1 : 0)

my12to24(colDate,colHours,colAMPM) = strftime(myTimeFmt24,timecolumn(colDate,myTimeFmt12a) + \
         myTime12to24(timecolumn(colHours,myTimeFmt12b),strcol(colAMPM)))

myInputTimeFmt = "%d.%m.%Y %H:%M:%S"
myOutputTimeFmt = "%d.%m.%Y\n%H:%M:%S"
set format x myOutputTimeFmt timedate

set table $Data2
    plot $Data u (my12to24(1,4,5)):6 w table
unset table
print $Data2

plot $Data2 u (timecolumn(1,myInputTimeFmt)):3 w lp pt 7 notitle  
### end of code
使用AM/PM设置时间格式 重置会话
$Data谢谢您的回复。我已经安装了gnuplot 5.4,它可以处理AM PM timeformat.ok,那么问题出在哪里呢?检查
帮助时间\u说明符
。在较新的版本中,
%p
也应将AM/PM作为输入处理(之前它只是输出)。
### time formatting with AM/PM (gnuplot 5.4)
reset session

$Data <<EOD
Jul 9, 2020  12:22:24 AM    1.23
Jul 9, 2020  11:59:59 AM    2.34
Jul 9, 2020  12:00:00 PM    3.45
Jul 9, 2020   1:22:24 PM    4.56
Jul 10, 2020  1:22:24 PM    5.67
EOD

myInputTimeFmt = "%b %d, %Y %H:%M:%S %p"
myOutputTimeFmt = "%d.%m.%Y\n%H:%M:%S"
set format x myOutputTimeFmt timedate

plot $Data u (timecolumn(1,myInputTimeFmt)):6 w lp pt 7 notitle
### end of code