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读一行 这里是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" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |