2014-03-04 194 views
1

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

在这里,有我在执行代码: 输入:$ file.fastq.gz 其中$文件是文件(它的变化,因为这个代码是一个循环内)

reads=$(gunzip $file.fastq) 
echo $reads 
的名字

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

+0

此外其他人都这么说,你要什么需要更多的报价。 'echo $ reads',而不是'echo“$ reads”',将会有一些严重的错误(将换行符改为空格,扩展通配符等)。 –

回答

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 

(原答案被误读的问题,保存为一个有用的非sequitor。)

你需要告诉gunzip写的未压缩的流输出到标准输出,而不是解压缩的文件-地点。

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

@ user3379797这里发布的两个答案中只有一个会解决您的需求;请指出哪一个(如果有的话)是你想要的。 – chepner

+0

嘿,谢谢!第二个答案更符合我正在寻找的东西,所以我会拿那个。我试过了,它的工作原理,它只需要一些计算时间,因为.gz文件相当大,但它现在正在工作。再次感谢 – user3379797

+0

根据您需要多久解压的结果,您可以在后台执行此操作,继续执行脚本的其余部分,然后在需要'$ file.fastq'时在'gunzip'上等待'' 。 – chepner

0

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

2)回声$读取 - 你不能储存未压缩文件中的变量..所以你不能指望变量读取会有未压缩文件的名称。

你还是使用

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

或者更短的语法查尔斯

的建议
if gunzip $file.fastq.gz 
then 
    reads="$file.fastq" 
fi 
+1

检查'$?'是否为零 - 非零是愚蠢的 - 你可以做'如果gunzip ...;那么...'而不是使用'$?'。将它作为一个单独的步骤使得通过使日志语句或其他内容更改存储在$ $中的值来引入错误更容易。 –

+0

如果您正在检查$的值?就在你完成了gunzip的行之后..什么可以改变$的价值? ..你可以有点明确什么日志报告/其他内容进来之间? –

+0

另外我不确定这里是否删除了一条评论......但有人质疑需要使用gunzip行..我想它已经相当清楚,我们需要解压缩该文件..这是写了什么: \t '的想法是,我生成* .fastq.gz文件,我需要解压缩并保留* .fastq文件。' –

0

使用ZCAT:

reads=$(zcat $file.fastq)