加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 19:46:40 所属栏目:安全 来源:网络整理
导读:我有一些肮脏的工作要做,所以一个Bash脚本似乎是一个不错的选择。我对Bash很新,而且这种经历使我感到很沮丧。 文件mapfiles.txt由以下行组成。每行有四个段用白色空格分开。每个段代表外部程序名’prog’的输入参数。例如,“cm19_1.png”是文件名,“0001
我有一些肮脏的工作要做,所以一个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"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读