|
From: Andrew R. <an...@gm...> - 2020-12-29 20:32:15
|
You can definitely pass arguments to a bash script. In the script, you use the arguments as variables $1, $2, etc. (Reference example: https://www.golinuxcloud.com/beginners-guide-to-use-script-arguments-in-bash-with-examples/ ). It will take some fiddling to construct the command in gnuplot, but if the variables are var1 and var2 for example, you can do it like this: > system("bash -c ./myscript.sh ".var1." ".var2) The '.' concatenates the string variables. If var1 or var2 is a number like 16.0 instead of a string "16.0", you might have to do something like the below with sprintf to get it to turn into a string correctly: > system("bash -c ./myscript.sh ".var1." ".sprintf("%.1f", var2)) Andy On Tue, Dec 29, 2020 at 12:48 AM qin...@st... < qin...@st...> wrote: > Dear Andy > > As your advice, we can reduce syntax / escape errors by put the paste / > awk script in a separate file ("myscript.sh"). > > Then call it from inside gnuplot as plot "< bash ./myscript.sh" > > But if the data file name (Q_byE_i*.txt) is a string variable and “16.0” > of “if($1==16.0” in awk part is also a variable, > > How can I pass these variables from gnuplot into myscript.sh. > > > > Because I'm not very familiar with linux, my questions might be very basic > or stupid. > > please forgive me. > > **************************************************** > 秦志豪 > 京都大学大学院 エネルギー科学研究科 > エネルギー基礎科学専攻 プラズマ・核融合基礎学分野 > 岸本研究室 > E-mail : qin...@st... > **************************************************** > > > > *发件人: *Andrew Rasmussen <an...@gm...> > *发送时间: *2020年12月29日 1:13 > *收件人: *qin...@st... > *抄送: *gnu...@li... > *主题: *Re: 回?: [Gnuplot-info] system command in gnuplot > > > > Yes, you should be able to make a similar modification, something like: > > > > plot "< bash -c 'paste <(cat Q_byE_i*.txt) <(cat Q_byM_i*.txt)|awk > \'{if($1==16.0) { e[$3] += $4 }}END { for ( i in e) { print i , e[i]}}\''" > > > > I can't test it out, so you might have to escape some additional > characters (* etc.). > > > > When you are using a command that is this complicated, a way to simplify > things and reduce syntax / escape errors is to put the paste / awk script > in a separate file ("myscript.sh") and call that script from inside gnuplot: > > > > plot "< bash ./myscript.sh" > > > > Andy > > > > On Mon, Dec 28, 2020 at 9:31 AM qin...@st... < > qin...@st...> wrote: > > Dear Andy > > > > Thank you very much. > > It worked. But I have another question. > > In fact, I tried to merge some data files, then plot a graph. > > The code is > > plot "< paste <(cat Q_byE_i*.txt) <(cat Q_byM_i*.txt)|awk '{if($1==16.0) > { e[$3] += $4 }}END { for ( i in e) { print i , e[i]}}'" u 1:2 > > > > The latter part of code about ‘awk’, I think there is no problem. Could I > modify the code as the system("bash -c 'paste <(ls Q*) <(ls F*)'")? > > > > Qin > > > > **************************************************** > 秦志豪 > 京都大学大学院 エネルギー科学研究科 > エネルギー基礎科学専攻 プラズマ・核融合基礎学分野 > 岸本研究室 > E-mail : qin...@st... > **************************************************** > > > > *发件人: *Andrew Rasmussen <an...@gm...> > *发送时间: *2020年12月28日 23:57 > *收件人: *qin...@st... > *抄送: *gnu...@li... > *主题: *Re: [Gnuplot-info] system command in gnuplot > > > > Hello, > > > > Your error comes from the fact that gnuplot is running the system command > using the sh shell instead of bash (or whatever your usual shell is). You > can get the command to be interpreted by bash like this: > > > > system("bash -c 'paste <(ls Q*) <(ls F*)'") > > > > Andy > > > > On Mon, Dec 28, 2020 at 4:11 AM qin...@st... < > qin...@st...> wrote: > > Hello > > Now I am using gnuplot (Version 5.2 patchlevel 6) on a Linux system. > The information of operating system as follow > Linux version 4.4.162-94.72-default (geeko@buildhost) (gcc version 4.8.5 > (SUSE Linux) ) > LSB Version: n/a > Distributor ID: SUSE > Description: SUSE Linux Enterprise Server 12 SP3 > Release: 12.3 > Codename: n/a > > My question: > I am trying to launch a system command in gnuplot like > Terminal type is now 'qt' > gnuplot> system(" paste <(ls Q*) <(ls F*)") > > show me the error message as > sh: -c: line 0: syntax error near unexpected token `(' > sh: -c: line 0: ` paste <(ls Q*) <(ls F*)' > > But if I exit the gnuplot and run the command, it can work. > qin@csc1:~/qin /txt> paste <(ls Q*) <(ls F*) > > any help would be much appreciated > have a nice day > > **************************************************** > 秦志豪 > 京都大学大学院 エネルギー科学研究科 > エネルギー基礎科学専攻 プラズマ・核融合基礎学分野 > 岸本研究室 > E-mail : qin...@st... > **************************************************** > > > _______________________________________________ > gnuplot-info mailing list > gnu...@li... > Membership management via: > https://lists.sourceforge.net/lists/listinfo/gnuplot-info > > > > > |