如何在 gnuplot 中使用 cat 和 EOF 在执行 gnuplot 脚本时创建文件



我想在执行过程中在 gnuplot 脚本中创建一个文件,for.sh。 然后,新文件将在 gnuplot 脚本中调用为

set xtics (`(sh for.sh)`)

for.sh 中的内容应该是这些。

#!/bin/bash
rm Final-X-ticks.dat
KPATH=data1
TICK_position=data2
sed -n  '/crystal coordinates with respect/,/REPRODUCED(TRANSFORMED) DATASET/p' $KPATH | sed  '/crystal/d' | sed  '/REPRODUCED/d' | awk '{print $4}' | sed -r '/^s*$/d' >  symbl.dat
line=$(cat symbl.dat | wc -l)
for i in `seq 1 1 $line`
do
echo " '{/Times-New  "  > symbl-$i.dat
cat symbl.dat |  tail -n $line | head -n "$i" | tail -n 1 >> symbl-$i.dat
echo " }'"  >> symbl-$i.dat
grep -i "coordinate" $TICK_position  | awk '{print $NF}' | head -n "$i" | tail -n 1 >>  kpoints-$i.dat
cat  kpoints-$i.dat | tail -n 1 | awk 'BEGIN { ORS = " " } { print }'  >> symbl-$i.dat
echo " ,"  >> symbl-$i.dat
cat symbl-$i.dat |  awk 'BEGIN { ORS = " " } { print }' |  awk '{gsub(/Times-New[ t]+(G|$\Gamma$)/, "Symbol G")} 1' | awk 'BEGIN { ORS = " " } { print }' >> Final-X-ticks.dat
done
rm  symbl-* symbl.dat  kpoints-*

我试过

cat > for.sh <<EOF
above contents
EOF

但它给了我错误

cat for.sh << EOF
^
"plot.gnu", line 19: invalid command

您可以使用数据块来保存文本,然后将其打印出来。例如

$MYSCRIPT <<EOF
#!/bin/bash
rm Final-X-ticks.dat
...
rm  symbl-* symbl.dat  kpoints-*
EOF
set print "for.sh"
print $MYSCRIPT
set print
set xtics (`(bash ./for.sh)`)

最新更新