使用zcat和sed或awk编辑压缩的.gz文本文件

时间:2015-02-17 17:44:27

标签: bash awk sed

我正在尝试编辑压缩的fastq.gz文本文件,删除第2,6,10,14行的前六个字符......我现在有两种不同的方法可以使用awk或sed,但是如果文件解压缩,这些似乎只能起作用。我想编辑文件而不解压缩它们并尝试以下代码而不让它工作。感谢。

使用sed:

zcat /dir/* | sed -i~ '2~4s/^.\{6\}//'

使用awk:

zcat /dir/* | awk 'NR%4==2 {gsub(/^....../,"")} 1'

2 个答案:

答案 0 :(得分:19)

您无法绕过压缩,但您可以自动链接解压缩/编辑/重新压缩:

for f in /dir/*; do
  cp "$f" "$f~" &&   
  gzip -cd "$f~" | sed '2~4s/^.\{6\}//' | gzip > "$f"
done

如果您对此操作非常有信心,可以通过将rm "$f~"添加到循环体的末尾来删除备份文件。

答案 1 :(得分:2)

我编写了一个名为zawk的脚本,它可以本机执行此操作。它类似于glenn jackman's answera duplicate of this question,但它在保留awkFILENAME的情况下处理FNR选项以及几种不同的压缩机制和输入方法。

您将以如下方式使用它:

zawk 'awk logic goes here' log*.gz

这不解决sed的“就地”标志(-i)。