我正在尝试在一系列管道中保存有关中间文件的一些信息。这些信息可以从前几十行收集到,所以理想情况下,我不想将整个事情处理两次。
我想要的最终结果是一个存储为变量的整数值,然后脚本可以在下一步中使用。
到目前为止,我所拥有的是
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