Bash: lea un archivo línea por línea y procese cada segmento como parámetros para otro programa

Tengo un trabajo sucio que hacer, por lo que un script de Bash parece ser una buena opción. Soy nuevo en Bash, y la experiencia me frustra un poco.

El archivo mapfiles.txt consta de líneas de la siguiente manera. 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 lanombre del archiv, "0001" elíndic, "121422481" ellongitu, y "31035995" ellatitu.

File: mapfiles.txt

cm19_1.png 0001 121422481 31035995
cm19_2.png 0002 121423224 31035995
cm19_3.png 0003 121423967 31035995
…

Quiero ejecutar comandos similares para cada línea. Como se muestra a continuación, el orden de los parámetros de entrada del programa es ligeramente diferente. Por lo tanto, 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

Generalmente, el script bash funcionará de esta manera:

Lea una línea de mapfiles.txtDividir los segmentos Llame al programa con un orden de parámetros 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 obtuve es

 cm19_1.png21422481 31035995
 cm19_2.png21423224 31035995
 cm19_3.png21423967 31035995

Problemas que me confundieron

¿Dónde está 'prog'? ¿Dónde está el espacio en blanco? ¿Qué tiene de malo el orden de los parámetros?

Hmm ... escribí este script en mi Mac usando vim y lo copié a un cuadro de Scientific Linux y un cuadro de gentoo. Estos tres tipos obtienen los mismos resultados ridículos.

Respuestas a la pregunta(3)

Su respuesta a la pregunta