gpt4 book ai didi

Bash:逐行读取文件并将每个段作为参数处理给其他程序

转载 作者:行者123 更新时间:2023-11-29 08:41:50 25 4
gpt4 key购买 nike

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

我想对每一行执行类似的命令。如下所示,程序的输入参数顺序略有不同。因此编写一个 bash 脚本来处理重复的工作是有意义的。

[Usage] prog <index> <longitude> <latitude> <filename>
example: prog 0001 121422481 31035995 cm19_1.png

一般bash脚本会这样操作:

  1. 从 mapfiles.txt 中读取一行
  2. 拆分段
  3. 以正确的参数顺序调用程序

来了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

让我困惑的问题

  1. “prog”在哪里?
  2. 空白在哪里?
  3. 参数顺序有什么问题?

嗯……我在我的 Mac 上使用 vim 编写了这个脚本,并将它复制到一个 Scientific Linux 机器和一个 gentoo 机器上。这三个人得到了同样荒谬的输出。

最佳答案

你可以大大简化这个:

while read file key log lat
do
echo "$cmd" "$key" "$log" "$lat" "$file"
done < "$input"

关于Bash:逐行读取文件并将每个段作为参数处理给其他程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7619438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com