从文件中读取逗号分隔的字符串列表,并对Bash中的每个字符串执行命令



我在一个文件中有一个逗号分隔的字符串列表,如下所示:输入文件sentences.txt包含:

'a1', 'b2', 'c3', 'd4'

在对上述字符串中的每一个运行脚本run_script.sh时,获得每个输入的对应输出。

输出文件output.txt包含:

'A1', 'B1', 'C1', 'D1'

例如,在单个字符串上运行脚本run_script.sh类似于:

bash run_script.sh a1 > prediction.txt

我想循环遍历文件sentences.txt的每个元素,运行脚本run_script.sh并将脚本的输出存储在prediction.txt中。

如何编写一个有效的bash脚本来做到这一点?

我试着按照这里的建议读取文件,但没有得到任何输出。

听起来像是家庭作业。:(
或者可能是XY问题。。。

首先,为什么c3会变成C1?这只是打字错误吗?

如果是SO,那么简单地说,将每行大写-

$: declare -u line; while read -r line; do echo "$line"; done < sentences.txt
'A1', 'B2', 'C3', 'D4'

CCD_ 10声明变量CCD_。CCD_ 12循环通过从STDIN分配给CCD_ 13的线。echo "$line"实际上只是打印(现在是大写(值。done < sentences.txt关闭循环并将文件指定为STDIN的源。

更简单(更快(的

tr '[[:lower:]]' '[[:upper:]]' < sentences.txt > prediction.txt

然而,如果你应该阅读每个";单词";在您的";句子";单独来看,这些输出比大写字母的拼写错误更复杂(如果你正在做基因组工作,这很可能…(,那么你需要一些更复杂的解析规则。

  • 你确定不能有嵌入的逗号吗
  • 逗号后面总是跟一个(单个?(空格字符吗
  • 所有字段总是单引号的吗
  • 在字段中是否存在任何嵌入空间
  • 脚本是否期望在其输入中嵌入单引号和逗号

等。显然,这类事情会破坏您的解析
不过,假设一个最简单的情况,所有这些假设都是有效的,仍然有一些相当简单的方法来处理它。

while read -ra words; do 
for word in "${words[@]}"; do
run_script.sh "$word"
done
done < sentences.txt > prediction.txt

另一方面,如果这些引号和逗号不应该被视为数据的一部分,你可能会更加头疼。。。

还有一些其他细节需要考虑。

bash run_script.sh a1 > prediction.txt
我想循环遍历文件sentences.txt的每个元素,运行脚本run_script.sh并将脚本的输出存储在prediction.txt中。

这将每次覆盖文件,完成后文件中唯一的内容将是最后一次操作的输出。最起码,您需要>>进行追加,以及一些在到达EOL之前防止换行的逻辑。

你能给我们多一点工作吗?

相关内容

  • 没有找到相关文章

最新更新