用于替换文件中的字符串并多次执行程序的 Linux bash 脚本

标签 linux bash

<分区>

我有一个程序需要两个文件作为输入,每次执行它需要 10 分钟。我需要执行该程序 500 次,但在每次执行之前,我需要更改两个输入文件中的每个单词的一部分。

例如,我有一个包含以下文件的目录:a_1、a_2、...、a_499、a_500、input1.dat 和 input2.dat。我需要一个 bash 脚本,以便在执行此脚本时:

1) 在两个输入文件:input1.dat 和 input2.dat 中,字符串“a_1”(这是我目录中的第一个文件的名称)被字符串“a_2”(目录中的第二个文件)替换。

2) 我的程序执行为:myprogram -i input1.dat (之所以只出现input1.dat是因为里面调用了input2.dat)

3) 当执行结束时,字符串“a_2”在两个输入文件中都被替换为“a_3”。

4)我的程序又被执行了

我需要对目录中的所有文件执行此操作(直到“a_499”被“a_500”替换并且程序最后一次执行),而不更改两个输入文件的名称

我是 bash 的新手,所以这超出了我的能力范围,但如果有人可以帮助我,那将节省我很多时间。

最佳答案

我假设您将希望第一次使用 a_1 运行,尽管您的描述中并不清楚这一点。下面的脚本应该可以解决问题,并且应该很容易理解。

cp input1.dat orig1.dat
cp input2.dat orig2.dat
for f in a_* ; do
    sed "s/a_1/$f/g" orig1.dat > input1.dat
    sed "s/a_1/$f/g" orig2.dat > input2.dat
    myprogram -i input1.dat
done

关于用于替换文件中的字符串并多次执行程序的 Linux bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45336234/

相关文章:

linux - 我需要在 oracle 数据库卡住时测试我的应用程序的行为。因此我需要模拟 oracle DB freeze

arrays - Bash 关联数组中带有空格的键

bash - 打印由第二个文件索引的行

linux - 通过命令行关闭以应用程序模式打开的谷歌浏览器

linux - 在 bash 中按数字对文件进行排序

linux - 自动设置/部署开发环境

linux - 需要使用批处理文件或脚本从 Windows 计算机创建 Linux 用户。我可以通过 ssh 访问服务器。

linux - UTF-8 文件可以包含一些不是 UTF-8 的字符吗?

bash - 如何自动化docker在容器中运行脚本并通知主机完成?

linux - 需要更好的数字组合解决方案