0

从我的计算工具中,我得到了两个图,一个是 xmgrace,另一个是一些 dat 文件格式。xmgrace 格式的前几行(比如文件grace.agr)有刻度标签及其位置,我想在我的gnuplot 脚本中使用它们。我的grace.dat 看起来像(总的ticklabels 可能在这里我只提到几个)

 @ page size 595, 842
 @ view 0.120000, 0.150000, 0.900000, 1.280000
 @ default linewidth 2.0
 @ xaxis  label char size 1.5
 @ xaxis  ticklabel char size 1.25
 @ yaxis  label char size 1.5
 @ yaxis  ticklabel char size 1.25
 @ xaxis  tick major grid on
 @ xaxis  tick spec type both
 @ xaxis  tick spec           8
@ xaxis  tick major   0, 0.00000
 @ xaxis  ticklabel            0 ,"\xG"
@ xaxis  tick major   1, 0.67643
 @ xaxis  ticklabel            1 ,"M           "
@ xaxis  tick major   2, 1.06696
 @ xaxis  ticklabel            2 ,"K           "
@ xaxis  tick major   3, 1.84803
 @ xaxis  ticklabel            3 ,"\xG"
@ xaxis  tick major   4, 1.98549
 @ xaxis  ticklabel            4 ,"A           "
@ xaxis  tick major   5, 2.66192
 @ xaxis  ticklabel            5 ,"L           "
@ xaxis  tick major   6, 3.05245
 @ xaxis  ticklabel            6 ,"H           "
@ xaxis  tick major   7, 3.83352
 @ xaxis  ticklabel            7 ,"A           "
@ with g0

在代码部分中提到的 grep、awk 和其他一些技巧的帮助下,我设法将以下数据附加到文件中(比如文件名是 SETTICKS.dat)

cat SETTICKS.dat 给了我这个:
set xtics ( "\xG" 0.00000, "M" 0.67643, "K" 1.06696, "\xG" 1.84803, "A" 1.98549, "L" 2.66192, "H" 3.05245, "A " 3.83352, )

grep 'bandindex:   1' -B10000 grace.agr | grep xaxis | grep 'type both' -A 1000 | grep 'xaxis  tick spec           ' -A1000 | grep '0, 0.00000' -A1000 | awk '{print $5}' | grep -v '^[0-9]' | awk '{p
rint substr($1,2); }'| awk -F\|  '{ print substr($1,1,4)}' > xlable-1.txt
# "
grep 'bandindex:   1' -B10000 grace.agr | grep xaxis | grep 'type both' -A 1000 | grep 'xaxis  tick spec           ' -A1000 | grep '0, 0.00000' -A1000 | awk '{print $5}' | grep -v '^[0-9]' | awk '{p
rint substr($1,2); }'| awk -F\|  '{ print substr($1,1,1)}' >  xlable-2.txt

#"X"
paste  xlable-* | awk '$1 =$1$2 {print}' | awk '{print$1}' > xlable-3.txt

#Tick_position
grep 'bandindex:   1' -B10000 grace.agr | grep xaxis | grep 'type both' -A 1000 | grep 'xaxis  tick spec           ' -A1000 | grep '0, 0.00000' -A1000 | awk '{print $6}' | awk '!/"/' | awk 'NF > 0'  
> xlable-4.txt

#comma
grep 'bandindex:   1' -B10000 grace.agr | grep xaxis | grep 'type both' -A 1000 | grep 'xaxis  tick spec           ' -A1000 | grep '0, 0.00000' -A1000 | awk '{print $5}' | grep -v '^[0-9]' | awk -F\
|  '{ print substr($1,1,1)}' > xlable-5.txt

paste xlable-4.txt xlable-5.txt | awk '$1 =$1$2 {print}' | awk '{print$1}' > xlable-6.txt
#cat xlable-6.txt

paste xlable-3.txt xlable-6.txt | awk '{print $1, $2}' | awk 'BEGIN { ORS = " " } { print }' >  xlable-7.txt

echo  "set xtics (" > x-tick-1.txt
echo  ")" > x-tick-2.txt


paste x-tick-1.txt xlable-7.txt x-tick-2.txt > SETTICKS.dat

我想在 gnuscript 的两个位置使用上述grace.agr 文件中的刻度及其位置,如下所示

(1)
set xtics ("\xG" 0.00000, "M" 0.67643, "K" 1.06696, "\xG" 1.84803 ,"A" 1.98549, "L" 2.66192, "H" 3.05245 ,"A" 3.83352,)  and then 

(2) 

set arrow from 0.00000,Y11 to 0.00000,Y12 nohead
set arrow from 0.67643,Y11 to 0.67643,Y12 nohead
set arrow from 1.06696,Y11 to 1.06696,Y12 nohead
set arrow from 1.84803,Y11 to 1.84803,Y12 nohead
set arrow from 1.98549,Y11 to 1.98549,Y12 nohead
set arrow from 2.66192,Y11 to 2.66192,Y12 nohead
set arrow from 3.05245,Y11 to 3.05245,Y12 nohead
set arrow from 3.83352,Y11 to 3.83352,Y12 nohead

其中 Y11 和 Y12 分别为 -10 和 10。

4

1 回答 1

1

我建议你一个只使用 awk 的解决方案。

对于第一部分

awk 'BEGIN {mystring="";FS=", *"}/tick major +[0-9]+/{myfield1=$2;getline;gsub(" ","");mystring=mystring$2" "myfield1", ";}END{print "set xtics ("mystring") and then ";}' grace.dat

你会得到这个输出:

set xtics ("\xG" 0.00000, "M" 0.67643, "K" 1.06696, "\xG" 1.84803, "A" 1.98549, "L" 2.66192, "H" 3.05245, "A" 3.83352, ) and then

对于第二部分

awk 'BEGIN {FS=", *"}/tick major +[0-9]+/{myfield1=$2;getline;gsub(" ","");print "set arrow from "myfield1",Y11 to "myfield1",Y12 nohead"}' grace.dat

你会得到这个输出:

set arrow from 0.00000,Y11 to 0.00000,Y12 nohead
set arrow from 0.67643,Y11 to 0.67643,Y12 nohead
set arrow from 1.06696,Y11 to 1.06696,Y12 nohead
set arrow from 1.84803,Y11 to 1.84803,Y12 nohead
set arrow from 1.98549,Y11 to 1.98549,Y12 nohead
set arrow from 2.66192,Y11 to 2.66192,Y12 nohead
set arrow from 3.05245,Y11 to 3.05245,Y12 nohead
set arrow from 3.83352,Y11 to 3.83352,Y12 nohead
于 2019-09-12T00:15:17.317 回答