使用awk的正则表达式将数据强制转换为gnuplot格式

时间:2014-09-24 09:49:19

标签: regex awk gnuplot

我正在努力摆脱这个:

Wed Sep 24 09:18:01 BST 2014 -- temp=51.9'C -- message from script /usr/src/scripts/wifi_test_2.sh

要输入gnuplot格式:

09:18:01 51.9

使用正则表达式和awk

1)我可以使用/temp=/识别“ temp = ”但是如何在=符号后打印出4个字符?

3 个答案:

答案 0 :(得分:4)

为什么不试试sed

$ sed -r 's/.*([0-9]{2}:[0-9]{2}:[0-9]{2}).*temp=([0-9.]+).*/\1 \2/g' file
09:18:01 51.9

如果这是你的实际输入,那么你可以尝试下面的awk命令,

$ awk -F"[ =']" '{print $4,$9}' file
09:18:01 51.9

答案 1 :(得分:3)

将GNU awk用于gensub():

$ awk '{print $4, gensub(/.*temp=([0-9.]+).*/,"\\1","")}' file
09:18:01 51.9

使用其他awks使用match()和substr():

$ awk '{print $4, substr($0,match($0,/temp=[0-9.]+/)+5,RLENGTH-5)}' file
09:18:01 51.9

使用sed:

$ sed -r 's/.*(..:..:..).*temp=([0-9.]+).*/\1 \2/' file
09:18:01 51.9

答案 2 :(得分:0)

尽管这是一个古老的问题...为什么要使用awk或sed?为什么不使用gnuplot?

# Data.dat
Wed Sep 24 09:18:01 BST 2014 -- temp=51.9'C -- message from script /usr/src/scripts/wifi_test_2.sh
Wed Sep 24 10:19:02 BST 2014 -- temp=53.1'C -- message from script /usr/src/scripts/wifi_test_2.sh
Wed Sep 24 11:20:03 BST 2014 -- temp=55.2'C -- message from script /usr/src/scripts/wifi_test_2.sh

代码(也适用于gnuplot 4.6.0)

### extracting data
reset

FILE = "Data.dat"
set xdata time
set datafile separator " "
set timefmt "%H:%M:%S"

# function for extracting number between characters
ExtractNumber(s,c1,c2) = real(s[strstrt(s,c1)+1:strstrt(s,c2)-1])

plot FILE u (strcol(4)):(ExtractNumber(strcol(8),"=","'")) w lp pt 7 not
### end of code

enter image description here