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