【发布时间】:2011-11-28 23:39:02
【问题描述】:
我有一些繁重的工作要做,所以 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
…
我想对每一行执行类似的命令。如下图,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 机器上。这三个家伙得到了同样荒谬的输出。
【问题讨论】:
-
此处无法重现。寻找错别字。此外,而不是所有的削减只使用
read file key log lat。 UPD 查看答案。 -
在循环中结合ssh的时候,看看这个问题:stackoverflow.com/questions/9393038/…
标签: bash parameters line-by-line