使用 linux、awk 或 sed 编辑 gen.gz 文件的内容

使用 linux、awk 或 sed 编辑 gen.gz 文件的内容

我有一个gen.gz包含 6000 列的遗传数据文件。数据如下:

1 1:13380:C:A 13380 C A

我想编辑第二列,使其看起来像:

1 1:13380 13380 C A

我想删除第二列中的四个字符。

输入是一个gen.gz文件,我希望输出是相同的。

答案1

假设字段由空格字符分隔,您可以解压缩文件,将其输入awk以进行修改,然后将结果数据压缩为新文件名。这可以在单个管道中完成,而无需将未压缩的数据存储在磁盘上。操作完成后,检查结果,如果看起来正常,则用它替换原来的结果。

gzip -d -c gen.gz |
awk '{ sub(":[^:]*:[^:]*$", "", $2); print }' |
gzip -c >new-gen.gz

# look at new-gen.gz, and then

mv new-gen.gz gen.gz   # only if you want to discard the original data!

awk代码可以通过多种不同的方式完成。我选择:从第二个字段中删除最后两个分隔字符串,而不是按照您的建议删除最后四个字符。如果那里总是只有单个字符,则:[^:]*:[^:]*$可以将正则表达式写为:.:.$

由于您正在修改压缩文件中的数据,因此您无法真正对文件进行就地编辑(与 一样sed -i)。

相关内容