我试图将一行gzip文件中的行放入变量中,稍后我计划将此stdout用于使用tee的另一个进程。为什么不知道wc -l的值是否会被放入变量中,我该如何解决这个问题呢?
[]$ gzip -dc BC102.fastq.gz | wc -l
4255588
[]$ gzip -dc BC102.fastq.gz | echo $(wc -l)
4255588
[]$ gzip -dc BC102.fastq.gz | reads=$(wc -l); echo $reads
0
整条线最终应该看起来像
gzip -dc BC102.fastq.gz | tee >(reads=$(wc -l)) | cutadapt -ga...
我不知道这是How to set a variable to the output from a command in Bash?的副本,因为我已经应用了那里列出的答案来直接回应wc -l的值,但它不会被插入变量。
答案 0 :(得分:3)
tee
将stdout加上写入作为参数给出的所有文件。它不会写入您可以附加的两个不同的管道。
试试这个:
t=$(tempfile)
reads=$(gzip -dc BC102.fastq.gz | tee $t | wc -l)
现在您可以继续使用脚本
了cutadapt -ga $t
而reads
包含行数。
答案 1 :(得分:0)
如果在子shell中设置变量,它将对父级没有影响。这就是
发生的事情gzip -dc BC102.fastq.gz | tee >(reads=$(wc -l)) | cutadapt -ga...
但是没有明显的阻止你继续子shell中的管道:
reads=$(wc -l <(gzip -dc BC102.fastq.gz | tee >(cutadapt -ga... )))