Mit sprintf zu print-string-Wert
Eigentlich, bekomme ich dieses problem in Gnuplot. Aber in einer einfachen Art und Weise, das problem ist, das ich verwenden möchte sprintf drucken im format-string, auch wenn der string besteht aus zahlen und Zeichen. Wie diese:
a = '12/7'
sprintf('%.f', a)
Ich bin in der Lage, um es auszuführen in Gnuplot, aber es zeigt nur zahlen vor dem Zeichen "/". Ich erwarte die Ausgabe sollte so drucken Sie alle Inhalte von Variablen a
die '12/7'. Jeder Vorschlag für diesen Fall?
- Warum ist die Frage getaggt mit awk und gnuplot?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie beziehen sich auf die
sprintf
built-in-Funktion ingnuplot
die Dokumentationhelp sprintf
sagt:In der Unix-man-Seite für
%f
sagt (gekürzt):Daher müssen Sie verwenden ein anderes format specifier. Als fedorqui darauf hingewiesen, die entsprechenden Formatbezeichner
%s
.Ich beziehen sich oft auf die Tabelle in diesem link für die Suche des entsprechenden Formatbezeichner (ich finde die C-man-Seite ein bisschen zu lang).
Mit
sprintf
mit strings aus DateienUm
sprintf
formatieren einen string aus einer Datei, müssen Sie die Spalte angeben, in die Datei zu extrahieren, den string-Informationen aus. Dies muss durchgeführt werden, indem diestringcolumn
Befehl statt nur über eine$
Zeichen.Zum Beispiel, wenn Sie wollten eine Zahl aus einer Datei, die Sie möglicherweise verwenden Sie einen Befehl wie:
Aber für eine Zeichenfolge, die Sie brauchen:
%s
aber es zeigt einen Fehlerf_sprintf: attempt to print numeric value with string format
haben Sie eine Idee?gnuplot> a = '3.5'
undgnuplot> print(sprintf('%s hi', a))
es funktioniert gut für mich. Konnte Sie Bearbeiten Ihre ursprüngliche Frage mit den genauen code Ihrer Verwendung.plot "<awk '{$1=\"\"}1' '1q.dat' | sed '1 d'" matrix every 2::1 w image, \ '' matrix using ($1+1):2:(sprintf('%.f', $3)) every 2 with labels
plot "<awk '{$1=\"\"}1' '1q.dat' | sed '1 d'" matrix every 2::1 w image, \ '' matrix using ($1+1):2:(sprintf('%s', stringcolumn(3))) every 2 with labels
. Hoffentlich hilft.stringcolumn() called from invalid context
. @Christoph sagte, dass stringcolumn() funktioniert nicht in der matrix. BTW, netter Versuch...Wenn Sie sagen,
Erhalten Sie den int-Teil der Reihe, da durch die Verwendung eines
f
fahne in printf Umwandlung in eine Zahl anstelle eines Strings. So ist es äquivalent zu sagen:Wenn Sie möchten, um alle von ihm, verwenden Sie
%s
für string: