重新排序巨大文本文件开头附近的行(> 20G)

Dav*_*d Z 4 vim bash dd

我是一个vim用户,可以使用一些基本的awk或bash命令.现在我有一个大小超过20G的文本(vcf)文件.我想要的是将第69行移到第66行以下:

$less huge.vcf
...
    66 ##contig=<ID=9,length=124595110>                                                                                                                                                       
    67 ##contig=<ID=X,length=171031299>                                                                                                                                                       
    68 ##contig=<ID=Y,length=91744698>                                                                                                                                                        
    69 ##contig=<ID=MT,length=16299>
...
Run Code Online (Sandbox Code Playgroud)

我想要的是:

...
    66 ##contig=<ID=9,length=124595110>     
    67 ##contig=<ID=MT,length=16299>                                                                                                                                                  
    68 ##contig=<ID=X,length=171031299>                                                                                                                                                       
    69 ##contig=<ID=Y,length=91744698>                                                                                                                                                        
...
Run Code Online (Sandbox Code Playgroud)

我尝试使用vim(已安装LargeFile插件)打开并编辑它,但仍然无法正常工作.

Cha*_*ffy 14

简单的方法是从文件中复制要编辑的部分,就地修改它,然后将其复制回来.

# extract the first hundred lines
head -n 100 huge.txt >start.txt

# modify that extracted subset
vim start.txt

# copy that section back into the beginning of larger file
dd if=start.txt of=huge.txt conv=notrunc
Run Code Online (Sandbox Code Playgroud)

请注意,这仅适用于您的编辑不会更改要修改的部分的大小的情况.也就是说 - 确保start.txt在修改之后具有与之前相同的大小(以字节为单位).