könnten Sie awk
verwenden nur die Zeilen zu holen, wo die erste Spalte die Saiten passt:
plot "<awk '$1~/string1/' DATAFILE" using 2:3 title column(1),\
"<awk '$1~/string2/' DATAFILE" using 2:3 title column(1)
und so weiter. Für eine integrierte in gnuplot-Lösung können Sie tun:
plot "DATAFILE" u 2:(stringcolumn(1) eq "string1" ? $3:1/0),\
"DATAFILE" u 2:(stringcolumn(1) eq "string2" ? $3:1/0)
, wenn Sie etwas mehr automatische tun wollen, die Grundstücke für jeden eindeutigen Eintrag in der Spalte 1 ist diese Lösung für mich gearbeitet erzeugen würde:
Eingang Datei (test.dat - getrennt, sonst müssen cut
Erklärung unten ändern):
one 1 3
two 2 4
ten 3 5
ten 4 3
two 5 4
one 6 5
one 7 3
ten 8 4
two 9 5
ten 10 3
two 11 4
one 12 5
die folgende Zeile erstellt eine Plotten Anweisung für gnuplot und speichert in einer Datei:
cut -f1 test.dat | sort -u | awk '
BEGIN {print "plot\\"}
{print "\"test.dat\" u 2:(stringcolumn(1) eq \""$1"\" ?\$3:1/0),\\"}' > plot.gp
und die Inhalte sind:
plot\
"test.dat" u 2:(stringcolumn(1) eq "one" ?$3:1/0),\
"test.dat" u 2:(stringcolumn(1) eq "ten" ?$3:1/0),\
"test.dat" u 2:(stringcolumn(1) eq "two" ?$3:1/0),\
dann würden Sie tun:
gnuplot plot.gp
oder die Linie load "plot.gp"
zu Ihrem Skript hinzufügen.
Ich bin mir ziemlich sicher, dass es eine "gnuplot-only" Lösung geben muss, aber das geht über mein Wissen hinaus. Hoffe das hilft.
Ist es möglich, alle Strings zu drucken, auch wenn ich nicht weiß, was sie eigentlich sein? – petersohn
Ja, sicher. Ich habe meine Antwort mit einer möglichen Lösung bearbeitet. –