如果程序打印某些消息,如何在bash中继续while循环?

问题描述 投票:0回答:1

我正在使用某些遵循以下基本模式的软件来运行bash脚本。

while read sample; do
    software ${sample} > output.txt
done <samples.txt

对于某些示例,将显示此消息:“站点Pf3D7_02_v3:274217与另一个变量重叠,正在跳过...”

此消息不会停止软件运行,但会导致结果为假。因此,如果给出消息,我想停止软件并继续while循环进入下一个示例。 samples.txt中有很多示例,这就是为什么我无法手动执行此操作的原因。指出消息所针对的样本的方法也将有所帮助。因为是这样,我只是获得了该消息的许多行,却不知道该消息是针对哪个循环的。

是否有可能对此提供帮助?

我正在使用的程序称为bcftools共识。让我知道是否需要提供更多信息。

编辑:添加了“> output.txt”-意识到我将其剥离得太多了

bash while-loop break continue bcftools
1个回答
0
投票

我将使用命名管道在产生的输出中grep输出。

while IFS= read -r sample; do
    mkfifo p
    software "$sample" > p &
    grep -q -m 1 "The site Pf3D7_02_v3:274217" p && kill $!
    rm p
done < samples.txt

software将在后台运行,但阻塞直到grep开始从p读取。 grep匹配后,它将以零退出状态退出,kill将杀死您的后台作业。

如果您的grep版本不支持-m选项(这是常见的,但不是标准的,则可以使用awk

awk '/The site Pf3D7_02:v3:274217/ { exit 1; }' p && kill $!
© www.soinside.com 2019 - 2024. All rights reserved.