我正在尝试编辑压缩的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'
答案 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 answer至a duplicate of this question,但它在保留awk
和FILENAME
的情况下处理FNR
选项以及几种不同的压缩机制和输入方法。
您将以如下方式使用它:
zawk 'awk logic goes here' log*.gz
这不解决sed的“就地”标志(-i
)。