我正在尝试在一系列管道中保存有关中间文件的一些信息。可以从前几十行中收集到这些信息,因此理想情况下我不希望对整个事情进行两次处理。
我想要的最终结果是一个存储为变量的整数值,然后脚本可以将其用于下一步。
我目前的情况是
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
。
如何在一系列管道中间将信息保存到这样的变量中?
最佳答案
变量 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 进行剩余的处理
关于linux - 将信息保存为一系列管道中间的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27026379/