我有一些琐碎的工作要做,所以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中读取一行
- 分割segments
- 使用正确的参数顺序调用程序
这里是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编写了这个脚本,然后将它复制到Scientific Linux和gentoo box上,这三个系统都输出了相同的荒谬结果。
read file key log lat
代替所有的切割。更新请查看答案。 - n. m.