我正在尝试在一系列管道中保存有关中间文件的一些信息。这些信息可以从最初的几十行收集,所以理想情况下我不想处理整个事情两次。
我想要的最终结果是存储为变量的整数值,然后脚本可以将其用于下一步。
到目前为止我所拥有的是
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
包含输入文件中第10列的前100行的第一个排序长度。
当我运行此操作时,我没有收到任何错误,但未设置READ_LEN
。我认为这是因为eval
的使用,因此stdout没有被传递到awk
。
如何在一系列管道中间将信息保存到这样的变量中?
答案 0 :(得分:2)
变量READ_LEN在子shell中设置(因为它包含在“$(...)中。当子shell退出变量时被销毁。捕获值并在父shell中设置变量像
这样的东西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进行剩余的处理