我有一些骯髒的工作要做,所以Bash腳本似乎是一個不錯的選擇。我是Bash新手,經歷讓我感到沮喪。Bash:逐行讀取文件並將每個段作爲參數傳給其他prog
文件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腳本來處理重複的工作是有意義的。
[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png
通常,bash腳本會以這種方式操作:從mapfiles.txt
- 讀取一行段
- 呼叫用正確的參數順序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
問題
- 哪裏是 '前衛'?
- 白色空間在哪裏?
- 參數順序有什麼問題?
嗯......我在我的Mac上用vim編寫了這個腳本,並將它複製到Scientific Linux盒子和一個gentoo盒子中。這三個人得到同樣荒謬的結果。
不可再生這裏。尋找錯別字。此外,而不是所有的削減只使用'讀取文件密鑰日誌lat'。 * UPD *查看答案。 –
當與循環中的ssh結合使用時,請看一下這個問題:http://stackoverflow.com/questions/9393038/ssh-breaks-out-of-while-loop-in-bash – Christian