bash解压缩gz并存储在变量中

时间:2014-03-04 16:10:46

标签: linux bash gzip compression gunzip

我需要解压缩.gz文件并将其存储在变量中,以便稍后使用。所以,我的想法是生成* .fastq.gz文件,我需要解压缩它们并保留* .fastq文件。然后,我想将其名称存储在变量中,因此我可以调用该文件进行进一步处理。

这里有我正在执行的代码: 输入:$ file.fastq.gz 其中$ file是文件的名称(它会更改,因为此代码在循环中)

reads=$(gunzip $file.fastq)
echo $reads

有人知道这段代码有什么问题吗?为什么它不产生任何输出并且程序保持在那一点?非常感谢你! ;)

3 个答案:

答案 0 :(得分:4)

如果输入文件为$file.fastq.gz,则生成的输出文件只是删除了.gz扩展名的文件。

gunzip "$file.fastq.gz" & gunzip_pid=$!
reads="$file.fastq"
# Do some more work that doesn't depend on the contents of $file.fastq
# ...
wait $gunzip_pid || { echo "Problem with gunzip"; exit; }
# Do something with the now-complete $file.fastq here

(对错误解释的问题的原始答案,保存为有用的非查询者。)

您需要告诉gunzip将未压缩的流写入标准输出,而不是将文件解压缩到原位。

reads=$(gunzip -c "$file.fastq.gz") || { echo "Problem with gunzip; exit; }
echo "$reads"

答案 1 :(得分:0)

1)读= $(gunzip $ file.fastq)< ---首先你应该在.gz文件上做你的gunzip

2)echo $ reads - 您无法将未压缩的文件存储在变量中..因此您不能指望变量读取具有未压缩文件的名称。

你应该使用

gunzip $file.fastq.gz
if [[ $? -eq 0 ]]
then 
    reads="$file.fastq"
fi

或者Charles

建议的更短的语法
if gunzip $file.fastq.gz
then 
    reads="$file.fastq"
fi

答案 2 :(得分:0)

使用zcat:

 reads=$(zcat $file.fastq)