gnuplotting in a shell | Unix Linux Forums | Shell Programming and Scripting

  Go Back    


Shell Programming and Scripting Post questions about KSH, CSH, SH, BASH, PERL, PHP, SED, AWK and OTHER shell scripts and shell scripting languages here.

gnuplotting in a shell

Shell Programming and Scripting


Closed Thread    
 
Thread Tools Search this Thread Display Modes
    #1  
Old 08-25-2006
pau pau is offline
Registered User
 
Join Date: Apr 2006
Last Activity: 29 February 2012, 11:44 AM EST
Posts: 47
Thanks: 0
Thanked 0 Times in 0 Posts
gnuplotting in a shell

Hi,

I am trying to automate the gnuplotting of more than 500 data files. For this, I have written a script which is working fine but for one issue...

The problem is that I have to plot the whole data and then plot the row starting with 60001 because I use a different symbol for it. Therefore I look in my data files for a particular row starting with 60001. As you can see below in my script, I do this with gawk. My data files look like
-----------------------------------------
##comment
##comment
45601 value1 value2 etc ...
34210 value1 value2 etc ...
21345 value1 value2 etc ...
.
.
60001 value1 value2 etc ...
34213 value1 value2 etc ...
--------------------------------------------

The row starting with 60001 changes its position in the different data files, so that I have to gawk it out.

The script is:

-----------------------------------------------------
#!/usr/bin/env zsh

for f in *.asc.gz ; do
eps_file=`basename $f .asc.gz`.eps

gnuplot <<EOF
unset key
set xrange [-15:15]
set yrange [-15:15]
set xlabel "X (pc)" font "Helvetica,12"
set ylabel "Y (pc)" font "Helvetica,12"
set terminal postscript eps enhanced ; set output "$eps_file"
set pointsize 1
plot "< zcat $f" using 3:4 with dots lt 8;
set pointsize 2;
replot "< zcat $f | gawk -v NAME=60001 '/AS/ {TIME=$4} $1==NAME {print TIME,$2,$3,$4,$5,$6,$7,$8,$11; exit}'" using 3:4 with points pt 6 lt -1 ;
unset output
EOF
done
---------------------------------------------------

(I print more columns that I need but this is not the problem)

When I give gnuplot the commands for a single data file I get what I want; when I execute the script in the directory with 500 files, I get

--------------------------------------
gawk: /AS/ {TIME=} ==NAME {print TIME,,,,; exit}
gawk: ^ syntax error
gawk: /AS/ {TIME=} ==NAME {print TIME,,,,; exit}
gawk: ^ syntax error
gawk: /AS/ {TIME=} ==NAME {print TIME,,,,; exit}
gawk: ^ syntax error
gawk: /AS/ {TIME=} ==NAME {print TIME,,,,; exit}
gawk: ^ syntax error
gawk: /AS/ {TIME=} ==NAME {print TIME,,,,; exit}
gawk: ^ syntax error
gawk: /AS/ {TIME=} ==NAME {print TIME,,,,; exit}
gawk: ^ syntax error

zcat: stdout: Broken pipe

gnuplot> plot "< zcat Splotch4_0010_part.asc.gz" using 3:4 with dots lt 8, "< zcat Splotch4_0010_part.asc.gz | gawk -v NAME=60001 '/AS/ {TIME=} ==NAME {print TIME,,,,; exit}'" using 3:4 with points pt 6 lt -1 ;
^
line 0: no data point found in specified file
------------------------------------------

and so on and so forth...

Can anybody help me?

Thanks in any case
Sponsored Links
    #2  
Old 08-26-2006
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 19 April 2014, 8:15 AM EDT
Location: NM
Posts: 10,058
Thanks: 250
Thanked 756 Times in 711 Posts

Code:
replot "< `zcat $f | gawk -v NAME=60001 '/AS/ {TIME=$4} $1==NAME {print TIME,$2,$3,$4,$5,$6,$7,$8,$11; exit}'`" using 3:4 with points

Add a pair of backticks.

If the data is in compressed format use zcat otherwise use cat.
Sponsored Links
    #3  
Old 08-26-2006
pau pau is offline
Registered User
 
Join Date: Apr 2006
Last Activity: 29 February 2012, 11:44 AM EST
Posts: 47
Thanks: 0
Thanked 0 Times in 0 Posts
Hi,

thanks for your answer... Actually it didn't work. My data is gzipped and the shell script looks like this now:


Code:
#!/usr/bin/env zsh

for f in *.asc.gz ; do
  eps_file=`basename $f .asc.gz`.eps

  gnuplot <<EOF
    unset key
    set xrange [-15:15]
    set yrange [-15:15]
    set xlabel "X (pc)" font "Helvetica,12"
    set ylabel "Y (pc)" font "Helvetica,12"
    set terminal postscript eps enhanced ; set output "$eps_file"
    set pointsize 1
    plot "< `zcat $f`" using 3:4 with dots lt 8, plot "< `zcat $f | gawk -v NAME=60001 '/AS/ {TIME=$4} $1==NAME {print TIME,$2,$3,$4,$5,$6,$7,$8,$11; exit}'`" using 3:4 with points pt 6 lt -1
    unset output
EOF
done

but I get just a lot of


Code:
gnuplot> 3205  0.163931745191803E-04 -0.907177552580833E-01  0.397187858819962E+00  0.159223228693008E+00 -0.691880345344543E+00  0.227686256170273E+00 -0.249464988708496E+00  0.298150134086609E+01 -0.151934671401978E+01  0.437424212694168E+00          0
         ^
         line 0: invalid command


gnuplot> 3206  0.163931745191803E-04 -0.413754805922508E-01  0.191585481166840E+00 -0.704685896635056E-01  0.115810036659241E+00 -0.425811052322388E+00  0.161283984780312E+00  0.504894542694092E+01 -0.163576829433441E+01  0.208285257220268E+00          0
         ^
         line 0: invalid command

But I guess one should somehow "protect" the shell commands wrapped within gnuplot... if it's not ` ` then what??
    #4  
Old 08-26-2006
jim mcnamara jim mcnamara is offline Forum Staff  
...@...
 
Join Date: Feb 2004
Last Activity: 19 April 2014, 8:15 AM EDT
Location: NM
Posts: 10,058
Thanks: 250
Thanked 756 Times in 711 Posts
I have played with gnuplot. I'm not expert. But what your syntax does is to redefine
stdin (what < does) to be the output of the zcat statement.

1. Take the zcat statement out of where it is, run it solo and see what the output of the zcat statement looks like?
2. Now you have good input for gnuplot. redirect the good input to a new file.
3. feed the good file to gnuplot.


Code:
zgrep -v '^60001' "$f" > fixedfile
# now the file doesn't have to be unpacked with zcat.
zgrep '60001' "$f"  > 600001file

Work with fixed file. If it needs formatting
Reformat 60001 file as needed.
put the two files back together, feed to gnuplot....
Sponsored Links
    #5  
Old 08-26-2006
sssow sssow is offline
Registered User
 
Join Date: Aug 2001
Last Activity: 17 December 2008, 6:03 PM EST
Posts: 179
Thanks: 0
Thanked 0 Times in 0 Posts
also, an unrelated suggestion. You dont have to invoke gnuplot in interactive mode. You can put all the commands in a file and call gnuplot and it will create output as desired.
Sponsored Links
Closed Thread

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
Need help with a shell script:Config Transparent Proxy using Shell kaka287 Shell Programming and Scripting 0 01-10-2010 02:58 AM
calling 'n' number of shell scripts based on dependency in one shell script. shashi369 Shell Programming and Scripting 1 11-03-2009 04:31 PM
Help need to make a shell script run for ffmpeg vhook watermaking in shell wingchun22 Shell Programming and Scripting 1 09-27-2008 06:52 AM
How to Start a Shell as Login shell instead of ordinary shell Sivaswami Linux 3 07-01-2008 01:52 PM
Difference between writing Unix Shell script and AIX Shell Scripts haroonec AIX 0 04-12-2006 02:27 AM



All times are GMT -4. The time now is 04:37 AM.