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

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.

Hi,

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

#!/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

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??

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.
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....

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.