微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Bash:逐行读取一个文件,并将每个段作为参数处理到其他进程

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

困惑我的问题

>’prog’在哪里?
>白色空间在哪里?
>参数顺序有什么问题?

嗯…我在Mac上使用vim写了这个脚本,并将其复制到Scientific Linux框和gentoo框。这三个人得到了同样可笑的输出

你可以简化这个很多:
while read file key log lat
do
  echo $cmd $key $log $lat $file
done < "$input"

原文地址:https://www.jb51.cc/bash/388522.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐