代码之家  ›  专栏  ›  技术社区  ›  user3379797

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

  •  2
  • user3379797  · 技术社区  · 11 年前

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

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

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

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

    3 回复  |  直到 11 年前
        1
  •  5
  •   chepner    11 年前

    如果输入文件是 $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"
    
        2
  •  0
  •   steffen    11 年前

    使用zcat:

     reads=$(zcat $file.fastq)
    
        3
  •  0
  •   Nishant Shrivastava    11 年前

    1) 读取=$(gunzip$file.fastq)<---首先,您应该对.gz文件执行gunzip

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

    你应该使用

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

    或者Charles建议的更短的语法

    if gunzip $file.fastq.gz
    then 
        reads="$file.fastq"
    fi