我有这个输入数据,我想用gnuplot绘图。
01-02-18 456
01-05-18 438
01-06-18 451
01-09-18 458
如何调用gnuplot?
答案 0 :(得分:1)
据我所知,您的预期输出是:
date(mm-dd-yy) time(in s since midnight)
如果我是对的,你可以使用:
paste <(awk '{print $1}' dump.run) <(awk '{print $3}' dump.run | awk -F ':' '{print 3600*$1+60*$2+$3}')
输出:
02-02-18 448.932
02-03-18 445.523
02-04-18 443.869
02-05-18 446.106
答案 1 :(得分:1)
我认为在这种情况下不需要任何perl / awk预处理。 Gnuplot可以本地处理这样的输入,你只需要指定正确的timefmt
:
$DATA <<EOD
01-02-18 456
01-05-18 438
01-06-18 451
01-09-18 458
EOD
set xdata time
set timefmt '%d-%m-%y'
set format x '%d-%m-%y'
plot $DATA u 1:2 w lp
答案 2 :(得分:0)
perl -pe 's/^([0-9-]+)\s+(\d+)\s+(\d+):(\d+):(\d+)\.(\d+)/sprintf("%s %d.%d", $1, $2*86400+$3*3600+$4*60+$5, $6)/e;' <dump.run
02-02-18 448.932
02-03-18 445.523
02-04-18 443.869
02-05-18 446.106
或者
perl -pe 's/
^([0-9-]+)\s+(\d+)\s+(\d+):(\d+):(\d+)\.(\d+)
/
sprintf("%s %d.%d", $1, $2*86400+$3*3600+$4*60+$5, $6)
/ex;' <dump.run
在perl正则表达式中使用x
修饰符,以便能够拆分它们。
02-02-18 448.932
02-03-18 445.523
02-04-18 443.869
02-05-18 446.106
答案 3 :(得分:0)
如果您有awk
和gnuplot
,则可以使用此脚本:
awk '{print $1,substr($3,1,2)*3600+substr($3,4,2)*60+substr($3,7)}' file | gnuplot -e 'set xdata time; set timefmt "%m-%d-%y"; plot "/dev/stdin" using 1:2 with lines'
awk
脚本将输入文件的第三列转换为秒。
将结果数据(日期,秒数)传递给gnuplot进行显示。 X轴设置为参数xdata
的日期,格式设置为timefmt
。