やらなければならない汚い仕事があるので、Bashスクリプトは良い選択のようです。私はBashを初めて使用しますが、その経験は私を少し苛立たせます。
ファイルmapfiles.txtは、次の行で構成されています。各行には、空白で区切られた4つのセグメントがあります。各セグメントは、外部プログラム名「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スクリプトを作成することは理にかなっています。
[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png
通常、bashスクリプトは次のように動作します。
- mapfiles.txtから1行を読み取ります
- セグメントを分割する
- 正しいパラメータ順序でprogを呼び出します
これが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
私を混乱させた問題
- 'prog'はどこにありますか?
- 空白はどこにありますか?
- パラメータの順序の何が問題になっていますか?
うーん…このスクリプトをMacでvimを使用して作成し、ScientificLinuxボックスとgentooボックスにコピーしました。これらの3人は同じばかげた出力を取得します。