2016-05-24 4 views
1

gzipファイルの行数を変数に入れようとしていますが、後でこのstdoutをteeを使って別のプロセスに使う予定です。なぜwc -lの値が変数に入れられないのでしょうか?これをどのように修正できますか?teeを使って行内の変数にstdoutをロードする

[]$ 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... 

のように見えることになっている私は、私はすでにwcの値をエコーためにそこに記載されている答えを適用したので、これはHow to set a variable to the output from a command in Bash?から重複しているかが表示されません-lは直接入力しますが、変数には挿入されません。

+0

これをhek2mlg @は重複ではありません。 –

+1

@LutzHornもちろん、それは複製です。 Btw、私は "1 + 2"の結果は "1 + 1の結果は何ですか?"という質問と重複していると考えます。 – hek2mgl

+0

これは重複していると思う質問は、変数のstdoutをキャプチャすることに関するものです。この質問は、別のパイプで出力*をキャプチャすることについてです。 –

答えて

3

teeは、引数として与えられたすべてのファイルにstdout plusを書き込みます。それはあなたが付けることができる2つの異なるパイプに書き込みません。

はこれを試してみてください:readsは、行数が含まれていながら、

t=$(tempfile) 
reads=$(gzip -dc BC102.fastq.gz | tee $t | wc -l) 

今すぐあなたのスクリプトで

cutadapt -ga $t 

を続けることができます。

+0

'gzip -dc BC102.fastq.gz | tee>(読み込み= $(wc -l))| cutadapt -ga ... '私はそれを使うことはできないと思う。 – Xizam

+0

私は自分の答えを編集しました。 –

+0

ああ、私は明らかにティーの使用を誤解しました。完璧、ありがとう! – Xizam

0

サブシェルに変数を設定すると、その変数は親には影響しません。それはあなたがサブシェルでパイプを続けてから

gzip -dc BC102.fastq.gz | tee >(reads=$(wc -l)) | cutadapt -ga... 

と何が起こるかであるが、何も明らか停止:出力が*倍*を使用しなければならないので、

reads=$(wc -l <(gzip -dc BC102.fastq.gz | tee >(cutadapt -ga...))) 
関連する問題