我正在努力摆脱这个:
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个字符?
答案 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