2016-05-04 2 views
0

Ich möchte den fit-Befehl für mehrere Dateien in gnuplot verwenden. Ich weiß, dass für mehr als eine Datei, wenn der Betrieb auf den Säulen das gleiche ist, der Befehl zum Beispiel:Passen Sie eine Funktion mit mehreren Dateien und in verschiedenen Einheiten

f(x)=a*x+b 
fit f(x) '< cat file1 file2 file3' using ($18/-200):($4/200) via a,b 

Jetzt statt, die die gleiche Operation ($18/-200):($4/200), würde Ich mag verschiedene Operationen tun (weil zum Beispiel haben die Dateien die gleichen Mengen, aber in verschiedenen Einheiten); beispielsweise für Datei 1 ($18/-200):($4/200) und für Datei 2 ($3*200):($7/400). Der Befehl

fit f(x) '< cat file1 file2' using '($18/-200):($4/200) ($3*200):($7/400)' via a,b 

, dass ich naiv versuchte, funktioniert nicht. Irgendein Hinweis? Diese Frage ist ähnlich wie How to fit a function with multiple files in gnuplot

Dank

Antwort

0

Wenn Sie bereits bash Befehle verwenden, dann Sie awk vorverarbeitet Ihre Daten verwenden:

# Get number of lines in file 1 
n1 = word(system("wc -l file1"), 1) 

# Create command to preprocess data 
filename = "< cat file1 file2 | awk '{if(NR < 1+".n1."){print $18/-200., $4/200.} else{print $3*200, $7/400.}}'" 

fit f(x) filename using 1:2 via a,b 

Oder erzeugen eine temp Datei innerhalb bash :

n1=`wc -l file1 | awk '{print $1}'` 

cat file1 file2 | awk -v n1=$n1 '{if(NR < 1+n1){print $18/-200., $4/200.} else{print $3*200, $7/400.}}' > temp 

und verwenden Sie es für die Passform w ithin gnuplot:

fit f(x) temp using 1:2 via a,b 
+0

Ich könnte falsch verstehen, aber GNUPLOT beide Definitionen von n1 und den Dateinamen „ungültiger Befehl“ antwortet. – Fred

+0

... und der bash-Befehl gibt "Badly plaited()" für die Zeile n1 = word (System ("wc -l file1"), 1) und "filename: Command not found" für die zweite Zeile. – Fred

+0

@Fred Dies alles soll innerhalb einer gnuplot-Shell ausgeführt werden. – Miguel