我有一些肮脏的工作要做,所以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