我在一个文件中有一个逗号分隔的字符串列表,如下所示:输入文件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之前防止换行的逻辑。
你能给我们多一点工作吗?