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. Эти три парня получают одинаковые смешные результаты.