我正在使用某些遵循以下基本模式的软件来运行bash脚本。
while read sample; do
software ${sample} > output.txt
done <samples.txt
对于某些示例,将显示此消息:“站点Pf3D7_02_v3:274217与另一个变量重叠,正在跳过...”
此消息不会停止软件运行,但会导致结果为假。因此,如果给出消息,我想停止软件并继续while循环进入下一个示例。 samples.txt中有很多示例,这就是为什么我无法手动执行此操作的原因。指出消息所针对的样本的方法也将有所帮助。因为是这样,我只是获得了该消息的许多行,却不知道该消息是针对哪个循环的。
是否有可能对此提供帮助?
我正在使用的程序称为bcftools共识。让我知道是否需要提供更多信息。
编辑:添加了“> output.txt”-意识到我将其剥离得太多了
我将使用命名管道在产生的输出中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 $!