Re: 回?: 回?: system command in gnuplot

Andrew Rasmussen <[email protected]>
Newsgroups gmane.comp.graphics.gnuplot.user
Message-ID <CANrsd3z+eDHHqRScLdOi0VZRAMNXCruC91kH2GsxiB84m6DCHA@mail.gmail.com>
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 [email protected] <
[email protected]> 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 : [email protected]
> ****************************************************
>
>
>
> *发件人: *Andrew Rasmussen <[email protected]>
> *发送时间: *2020年12月29日 1:13
> *收件人: *[email protected]
> *抄送: *[email protected]
> *主题: *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 [email protected] <
> [email protected]> 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 : [email protected]
> ****************************************************
>
>
>
> *发件人: *Andrew Rasmussen <[email protected]>
> *发送时间: *2020年12月28日 23:57
> *收件人: *[email protected]
> *抄送: *[email protected]
> *主题: *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 [email protected] <
> [email protected]> 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 : [email protected]
> ****************************************************
>
>
> _______________________________________________
> gnuplot-info mailing list
> [email protected]
> Membership management via:
> https://lists.sourceforge.net/lists/listinfo/gnuplot-info
>
>
>
>
>

_______________________________________________
gnuplot-info mailing list
[email protected]
Membership management via: https://lists.sourceforge.net/lists/listinfo/gnuplot-info
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.