使用 zcat 和 sed 或 awk 编辑压缩的 .gz 文本文件
Use zcat and sed or awk to edit compressed .gz text file
我正在尝试通过删除第 2、6、10、14 行的前六个字符来编辑压缩的 fastq.gz 文本文件...我现在有两种不同的方法来执行此操作,要么使用awk 或 sed,但这些似乎只有在解压缩文件时才有效。我想在不解压缩文件的情况下编辑文件,并尝试了以下代码但没有让它工作。谢谢
使用 sed:
zcat /dir/* | sed -i~ '2~4s/^.\{6\}//'
使用 awk:
zcat /dir/* | awk 'NR%4==2 {gsub(/^....../,"")} 1'
您无法绕过压缩,但您可以以自动方式将 decompress/edit/recompress 链接在一起:
for f in /dir/*; do
cp "$f" "$f~" &&
gzip -cd "$f~" | sed '2~4s/^.\{6\}//' | gzip > "$f"
done
如果您对操作很有信心,可以通过在循环体末尾添加rm "$f~"
来删除备份文件。
我写了一个名为 zawk which can do this natively. It's similar to glenn jackman's answer to a duplicate of this question 的脚本,但它处理 awk
选项和几种不同的压缩机制和输入法,同时保留 FILENAME
和 FNR
。
你会像这样使用它:
zawk 'awk logic goes here' log*.gz
这没有解决 sed 的 "in-place" 标志 (-i
)。
我正在尝试通过删除第 2、6、10、14 行的前六个字符来编辑压缩的 fastq.gz 文本文件...我现在有两种不同的方法来执行此操作,要么使用awk 或 sed,但这些似乎只有在解压缩文件时才有效。我想在不解压缩文件的情况下编辑文件,并尝试了以下代码但没有让它工作。谢谢
使用 sed:
zcat /dir/* | sed -i~ '2~4s/^.\{6\}//'
使用 awk:
zcat /dir/* | awk 'NR%4==2 {gsub(/^....../,"")} 1'
您无法绕过压缩,但您可以以自动方式将 decompress/edit/recompress 链接在一起:
for f in /dir/*; do
cp "$f" "$f~" &&
gzip -cd "$f~" | sed '2~4s/^.\{6\}//' | gzip > "$f"
done
如果您对操作很有信心,可以通过在循环体末尾添加rm "$f~"
来删除备份文件。
我写了一个名为 zawk which can do this natively. It's similar to glenn jackman's answer to a duplicate of this question 的脚本,但它处理 awk
选项和几种不同的压缩机制和输入法,同时保留 FILENAME
和 FNR
。
你会像这样使用它:
zawk 'awk logic goes here' log*.gz
这没有解决 sed 的 "in-place" 标志 (-i
)。