У меня есть какая-то грязная работа, поэтому Bash script кажется хорошим выбором. Я новичок в 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
…
Я хочу выполнить аналогичные команды для каждой строки. Как показано ниже, порядок параметров ввода prog немного отличается. Поэтому имеет смысл написать Bash script для обработки повторяющейся работы.
[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png
Как правило, Bash script будет работать следующим образом:
- Прочитайте одну строку из 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
Проблемы, которые смутили меня
- Где "прог"?
- Где пробел?
- Что не так с порядком параметров?
Хмм... Я написал этот script на своем Mac с помощью vim и скопировал его в ящик Scientific Linux и коробку gentoo. Эти три парня получают те же смешные результаты.