У меня есть некоторая грязная работа, поэтому сценарий 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 работает следующим образом:
Здесь идет 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. Эти три парня получают одинаковые нелепые результаты.