Quiero usar gnuplot para dibujar figuras del archivo de datos, digamos foo.data . Actualmente, codifiqué el nombre del archivo de datos en el archivo de comandos, digamos foo.plt , y ejecuté el comando gnuplot foo.plg
para trazar datos. Sin embargo, quiero pasar el nombre del archivo de datos como un argumento de comando, por ejemplo, ejecutar un comando gnuplot foo.plg foo.data
. ¿Cómo analizar los argumentos de la línea de comandos en el archivo de script gnuplot? Gracias.
fuente
if
para suministrar valores predeterminados.if ! exists("filename") filename='default.data'
if (!exists("filename")
lugar deif ! exists("filename")
.-e
argumento, por ejemplo,-e "filename='default.data'; foo='bar'"
o-e "filename='default.data'" -e "foo='bar"'
.-e ...
opción tiene que preceder al nombre del archivo. De hechoman gnuplot
, podemos leer:-e
"lista de comandos" ejecuta los comandos solicitados antes de cargar el siguiente archivo de entrada . .Puede pasar argumentos a un script gnuplot desde la versión 5.0, con la bandera
-c
. Estos argumentos se accede a través de las variablesARG0
aARG9
,ARG0
siendo el guión, yARG1
paraARG9
las variables de cadena. El número de argumentos viene dado porARGC
.Por ejemplo, el siguiente script ("script.gp")
puede ser llamado como:
o dentro de gnuplot como
En gnuplot 4.6.6 y versiones anteriores, existe un
call
mecanismo con una sintaxis diferente (ahora obsoleta). Los argumentos se accede a través de$#
,$0
, ...,$9
. Por ejemplo, el mismo script anterior se ve así:y se llama dentro de gnuplot como (recuerde, versión <4.6.6)
Observe que no hay una variable para el nombre del script, por lo que
$0
es el primer argumento, y las variables se llaman entre comillas. No hay forma de usar esto directamente desde la línea de comandos, solo a través de trucos como el sugerido por @ con-fu-se.fuente
-c
interruptor con un script que contiene líneas comoplot 'data' using 0:($1/100)
.gnuplot
muere con la expresión inválida de error porque$1
desaparece. Donde me equivoco Tenga en cuenta que sin-c
, el script se ejecuta con éxito.gnuplot 5.0
agregando a estos ejemplos una línea comoplot 'data' using 0:($1/100)
, y no obtuve lo que dices. Sería raro, ya que esta versión define las variablesARG0
-ARG9
y no$1
-$9
. Supongo que también tiene la versión 5.0 (¿verdad?), Ya que el-c
indicador no es compatible con versiones anteriores. Necesitaría ver un script mínimo para ver dónde está el verdadero problema: /gnuplot 5.0 patchlevel 0
bajo Cygwin . El script de una líneaprint ARG1; plot 'data' using 0:($1/100)
imprime correctamente el valor pasado comoARG1
y luego sale con la expresión inválida de error apuntando a la barra diagonalprint ARG1; plot 'data' using 0:(/100)
.También puede pasar información a través del entorno como se sugiere aquí . El ejemplo de Ismail Amin se repite aquí:
En la cáscara:
En un script de Gnuplot:
fuente
name=plot_data_file ./the_gnuplot_script
.name=value command
le dice al shell que ejecute el comando con esa variable en particular en su entorno. Estoy usando bash 4.3.11, pero creo que es una característica de shell muy común.La respuesta de Jari Laamanen es la mejor solución. Solo quiero explicar cómo usar más de 1 parámetro de entrada con variables de shell:
y foo.plg:
Como puede ver, se pasan más parámetros con punto y coma (como en los scripts bash), pero las variables de cadena NECESITAN encapsularse con '' (sintaxis gnuplot, sintaxis Bash)
fuente
'
o"
para cadenas. Las comillas externas alrededor del-e
argumento deben ser"
para tener las variables bash sustituidas. Lo siguiente también funciona bien:OUTPUT=foobar; gnuplot -e "output=\"$OUTPUT\"; print output"
Puede usar truco en entorno unix / linux:
en el programa gnuplot: trama "/ dev / stdin" ...
En la línea de comando: gnuplot program.plot <data.dat
fuente
Esta pregunta está bien respondida, pero creo que puedo encontrar un nicho para llenar aquí independientemente, aunque solo sea para reducir la carga de trabajo de alguien que busque en Google esto como lo hice yo. La respuesta de vagoberto me dio lo que necesitaba para resolver mi versión de este problema y compartiré mi solución aquí.
Desarrollé un guión de trama en un entorno actualizado que me permitió hacer:
Esto se ejecuta perfectamente bien desde la línea de comandos en un entorno con un gnuplot reciente (5.0.3 en mi caso).
Cuando se cargó en mi servidor y se ejecutó, falló porque la versión del servidor era 4.6.4 (actual en Ubuntu 14.04 LTS). La cuña a continuación resolvió este problema sin requerir ningún cambio en el script original.
La combinación de estos dos scripts permite que los parámetros pasen de scripts bash a gnuplot sin tener en cuenta la versión de gnuplot y básicamente en cualquier * nix.
fuente
Incluso podrías hacer algo de magia de concha, por ejemplo, así:
Mi implementación es un poco más compleja (por ejemplo, reemplazar algunas fichas mágicas en la llamada sed, mientras ya estoy en eso ...), pero simplifiqué este ejemplo para una mejor comprensión. También podría hacerlo aún más simple ... YMMV.
fuente
En el shell escribe
y consecutivamente los archivos que quieras. -persist se usa para hacer que la pantalla gnuplot permanezca siempre que el usuario no salga de ella manualmente.
fuente
gnuplot -persist -c "myscript.plt" "mydata.csv" "myoutput.png"
este comando funciona bien y obtengo el archivo "myoutput.png" como espero, pero la pantalla gnuplot no aparece (NO hayexit
comando en myscript.plt). ¿Por qué? ¿Y cómo hacer que la pantalla gnuplot se muestre en mi ejemplo?Otra forma más es esta:
Tiene un script gnuplot llamado
scriptname.gp
:Ahora puede llamar al script gnuplot
scriptname.gp
por esta complicada sintaxis de paz:fuente
La respuesta de @ vagoberto parece la mejor en mi humilde opinión si necesita argumentos posicionales , y tengo una pequeña mejora para agregar.
sugerencia de vagoberto:
que recibe la llamada de:
para esos tipos flojos como yo, uno podría hacer que el script sea ejecutable (
chmod 755 script.gp
)luego use lo siguiente:
y ejecutarlo como:
fuente