我有一个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
)。