将信息另存为一系列管道中间的变量



我正在尝试在一系列管道中保存有关中间文件的一些信息。这些信息可以从前几十行收集到,所以理想情况下,我不想将整个事情处理两次。

我想要的最终结果是一个存储为变量的整数值,然后脚本可以在下一步中使用。

到目前为止,我所拥有的是

samtools bamshuf -Ou test.bam tmp | tee >($(eval READ_LEN=$(awk '{print length($10)}' | head -100 | sort -u))) | samtools bam2fq - | gzip -f > $OUT

我想READ_LEN包含输入文件中第 100 列前 100 行的第一个排序长度。

当我运行它时,我没有收到任何错误,但READ_LEN未设置。我认为这是因为使用了eval,所以 stdout 没有被传送到awk 上。

如何将信息保存到一系列管道中间的此类变量中?

变量READ_LEN设置在子外壳中(因为它包含在"$(...)"中)。 当子壳退出时,变量被销毁。 捕获值并在父外壳中设置变量。 类似的东西

while read value; do
  [ -n "$READ_LEN" ] && READLEN+=" "
  READ_LEN+=$value
done < <(samtools bamshuf -Ou test.bam tmp | awk '{print length($10)}' | head -100 | sort -u)

然后在其余的处理中使用READ_LEN

最新更新