2

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

这里是我正在执行的代码: input: $file.fastq.gz 其中 $file 是文件名(它会改变,因为这段代码在循环中)

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

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

4

3 回答 3

5

如果输入文件是$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"
于 2014-03-04T16:12:43.480 回答
0

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

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

你应该使用

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

或者查尔斯建议的更短的语法

if gunzip $file.fastq.gz
then 
    reads="$file.fastq"
fi
于 2014-03-04T16:15:59.907 回答
0

使用 zcat:

 reads=$(zcat $file.fastq)
于 2014-03-04T16:18:42.637 回答