2017-03-03 2 views
0

Was ich will:Pipe von Echo zu gnuplot Variable?

echo {0..2} | gnuplot --persist -e "f='{OUTPUT FROM ECHO}'" myplot.plg 
0 1 2 

FILE myplot.plg:

print f 
#plot for [fi in f] fi.".dat" using 1 w l title sprintf(fi) 

ANWENDUNG:

echo "python sim.py > "{0..2}".dat &" | bash - 
echo "node sim.js > "{0..2}".dat &" | bash - 
echo {0..2} | gnuplot --persist -e {Stack Overflow Magic?} myplot.plg 

Ziel viele Instanzen dieser sim gleichzeitig (unterschiedliche Anfangsbedingungen zu laufen wäre) Verwenden Sie echo, um den Befehl zu erstellen, & den Prozess zu verzweigen, und bash, um es auszuführen. Sobald die Simulation abgeschlossen ist, möchte ich alle Plots in einer Figur anzeigen. Bsp .: plot {0..100} .dat nolegend

+1

Ich glaube nicht, dass es wirklich einen vernünftigen Weg gibt, das zu tun. Als ich das letzte Mal versuchte (vor vielen Jahren), habe ich am Ende ein Here-Dokument für jeden Lauf erstellt und dieses als Skript an Gnuplot, IIRC übergeben. – tripleee

+1

Wenn Sie Python sowieso haben, ist Matplotlib viel vielseitiger, wenn Sie nur einfaches Plotten benötigen. – tripleee

+1

@triplee: Haben Sie gnuplot noch nicht benutzt, aber wenn Sie innerhalb eines der Flags eine Befehlsersetzungssyntax ausführen, funktioniert 'f' hier nicht? – Inian

Antwort

1

Gerade als ich dachte, alle Hoffnung sei verloren, rufe ich zur Rettung!

echo {0..2} | xargs -I{} gnuplot --persist -e "f='{}'" myplot.plg 

Mehr Spaß:

alias sgp="xargs -I{} gnuplot --persist -e \"f='{}'\"" 
echo {0..2} | sgp plot_files.plg 

Credit to this youtube video

Edit: Funktioniert nicht in tcsh (alias sgp Befehl). Xargs ist auch anders.