Bash: читать файл построчно и обрабатывать каждый сегмент как параметры для другой программы

У меня есть грязная работа, поэтому сценарий Bash кажется хорошим выбором. Я новичок в Bash, и этот опыт меня расстраивает.

Файл mapfiles.txt состоит из следующих строк. Каждая строка имеет четыре сегмента, разделенных пробелом. Каждый сегмент представляет входной параметр для внешнего имени программы «prog». Например, «cm19_1.png» являетсяимя файла, "0001"индекс, "121422481"долготаи "31035995"широта.

Файл: mapfiles.txt

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

Я хочу выполнить похожие команды для каждой строки. Как показано ниже, порядок ввода параметров программы немного отличается. Поэтому имеет смысл написать bash-скрипт для повторяющейся работы.

[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png

Обычно скрипт bash будет работать следующим образом:

Прочитайте одну строку из mapfiles.txtРазделить сегментыВызови прогу с правильным порядком параметров

Вот идет 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"

Что я ожидал

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

Фактический результат, который я получил,

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

Проблемы, которые смутили меня

Где находится прога?Где белое пространство?Что не так с параметром порядка?

Хм… я написал этот скрипт на своем Mac с помощью vim и скопировал его в коробку Scientific Linux и коробку gentoo. Эти три парня получают одинаковые смешные результаты.

Ответы на вопрос(3)

Ваш ответ на вопрос