Tengo un trabajo sucio que hacer, por lo que un guión Bash parece ser una buena opción. Soy nuevo en Bash, y la experiencia me frustra.Bash: lea un archivo línea por línea y procese cada segmento como parámetros a otro prog
El archivo mapfiles.txt se compone de las siguientes líneas. Cada línea tiene cuatro segmentos separados por un espacio en blanco. Cada segmento representa un parámetro de entrada para un nombre de programa externo 'prog'. Por ejemplo, "cm19_1.png" es el nombre de archivo , "0001" el índice de, "121422481" la longitud, y "31035995" la latitud.
del archivo: mapfiles.txt
cm19_1.png 0001 121422481 31035995
cm19_2.png 0002 121423224 31035995
cm19_3.png 0003 121423967 31035995
…
Quiero ejecutar comandos similares a cada línea. Como se muestra a continuación, el orden de los parámetros de entrada del programa es ligeramente diferente. Entonces tiene sentido escribir un script bash para manejar el trabajo repetido.
[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png
En general, la escritura del golpe funcionará de esta manera:
- Leer una línea de mapfiles.txt
- Dividir los segmentos
- llamada el prog con una orden de parámetro correcto
Aquí viene run.sh.
#!/bin/sh
input=mapfiles.txt
cmd=prog
while read line
do
file=$(echo $line | cut -d' ' -f1)
key=$(echo $line | cut -d' ' -f2)
log=$(echo $line | cut -d' ' -f3)
lat=$(echo $line | cut -d' ' -f4)
echo $cmd $key $log $lat $file
done < "$input"
Lo que esperaba es
prog 0001 121422481 31035995 cm19_1.png
prog 0002 121423224 31035995 cm19_2.png
prog 0003 121423967 31035995 cm19_3.png
…
el resultado real que tengo es
cm19_1.png21422481 31035995
cm19_2.png21423224 31035995
cm19_3.png21423967 31035995
Los problemas que me confundió
- ¿Dónde está 'progresivo'?
- ¿Dónde está el espacio en blanco?
- ¿Qué pasa con el orden de los parámetros?
Hmm ... Escribí este script en mi Mac usando vim y lo copié en una caja Scientific Linux y una caja de gentoo. Estos tres chicos obtienen los mismos resultados ridículos.
no es reproducible aquí. Busque errores tipográficos Además, en lugar de usar todos los cortes, simplemente usa 'read file key log lat'. * UPD * vea la respuesta. –
Cuando se combina con ssh en el ciclo, échele un vistazo a esta pregunta: http://stackoverflow.com/questions/9393038/ssh-breaks-out-of-while-loop-in-bash – Christian