OSX 大文件(超过 10GB)的终端文本编辑技巧
OSX terminal text editing trick for a big file (over 10GB)
我有 10-50GB 左右的文本文件。我需要按如下方式编辑这些文件的前几行;
原创;
>Aura head -n 2 042319_S6_L001_R1_001.fastq.recovered
==> 042319_S6_L001_R1_001.fastq.recovered <==
9�C�{a��e�T�l1�{jz7?\^tZ[1�Wvcb���]zj�\,����~
zT'zT'zT'zT'zT'zT'zT'zT'zT'zT'zTfŌȊ���@hYM�rkdt�t?��av��B�,KII9]�Hϛ�[�ada[�SY�o��|>K�H���k��%���'
�LDTM&Ãd�XQ@A00165:69:HKJ3YDMXX:1:1101:4390:1266 1:N:0:CATGAACA
AGTTAGCTCACCATGATGAAACAAGACT
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFF
@A00165:69:HKJ3YDMXX:1:1101:4896:1266 1:N:0:CATGAACA
TATCTTGTCACGATACTCAACATGTGGA
+
FFFFFFFFFFF:FFFFFFFFFFF:FFFF
@A00165:69:HKJ3YDMXX:1:1101:6307:1266 1:N:0:CATGAACA
期望的输出;
>Aura head -n 2 042319_S6_L001_R1_001.fastq.recovered
==> 042319_S6_L001_R1_001.fastq.recovered <==
@A00165:69:HKJ3YDMXX:1:1101:4390:1266 1:N:0:CATGAACA
AGTTAGCTCACCATGATGAAACAAGACT
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFF
@A00165:69:HKJ3YDMXX:1:1101:4896:1266 1:N:0:CATGAACA
TATCTTGTCACGATACTCAACATGTGGA
+
FFFFFFFFFFF:FFFFFFFFFFF:FFFF
@A00165:69:HKJ3YDMXX:1:1101:6307:1266 1:N:0:CATGAACA
我试着用 nano 来做这个,但是加载整个千兆字节的文件需要很长时间。我厌倦了按 split
分割文件,但由于某些原因,合并后的文件有损坏的行。我将不胜感激。
已更新:
前两行看起来好像是文件头的一部分,但此文件中没有二进制文本文件头。所以我想我很幸运。另一方面,这不是静态文本。每个文件的行的长度和内容不同。
结合@shellter 评论和帮助,摆脱非 ASCII 垃圾并获得我想出的所需输出的最简单脚本如下;
gsed -n 'l0' testfile | gsed 's/.*@/@/' | gsed '1,2d' | gsed 's/[$]//g'
我使用 brew install gnu sed
(gsed) 而不是 OSX 的 BSD sed
.
我有 10-50GB 左右的文本文件。我需要按如下方式编辑这些文件的前几行;
原创;
>Aura head -n 2 042319_S6_L001_R1_001.fastq.recovered
==> 042319_S6_L001_R1_001.fastq.recovered <==
9�C�{a��e�T�l1�{jz7?\^tZ[1�Wvcb���]zj�\,����~
zT'zT'zT'zT'zT'zT'zT'zT'zT'zT'zTfŌȊ���@hYM�rkdt�t?��av��B�,KII9]�Hϛ�[�ada[�SY�o��|>K�H���k��%���'
�LDTM&Ãd�XQ@A00165:69:HKJ3YDMXX:1:1101:4390:1266 1:N:0:CATGAACA
AGTTAGCTCACCATGATGAAACAAGACT
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFF
@A00165:69:HKJ3YDMXX:1:1101:4896:1266 1:N:0:CATGAACA
TATCTTGTCACGATACTCAACATGTGGA
+
FFFFFFFFFFF:FFFFFFFFFFF:FFFF
@A00165:69:HKJ3YDMXX:1:1101:6307:1266 1:N:0:CATGAACA
期望的输出;
>Aura head -n 2 042319_S6_L001_R1_001.fastq.recovered
==> 042319_S6_L001_R1_001.fastq.recovered <==
@A00165:69:HKJ3YDMXX:1:1101:4390:1266 1:N:0:CATGAACA
AGTTAGCTCACCATGATGAAACAAGACT
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFF
@A00165:69:HKJ3YDMXX:1:1101:4896:1266 1:N:0:CATGAACA
TATCTTGTCACGATACTCAACATGTGGA
+
FFFFFFFFFFF:FFFFFFFFFFF:FFFF
@A00165:69:HKJ3YDMXX:1:1101:6307:1266 1:N:0:CATGAACA
我试着用 nano 来做这个,但是加载整个千兆字节的文件需要很长时间。我厌倦了按 split
分割文件,但由于某些原因,合并后的文件有损坏的行。我将不胜感激。
已更新:
前两行看起来好像是文件头的一部分,但此文件中没有二进制文本文件头。所以我想我很幸运。另一方面,这不是静态文本。每个文件的行的长度和内容不同。
结合@shellter 评论和帮助,摆脱非 ASCII 垃圾并获得我想出的所需输出的最简单脚本如下;
gsed -n 'l0' testfile | gsed 's/.*@/@/' | gsed '1,2d' | gsed 's/[$]//g'
我使用 brew install gnu sed
(gsed) 而不是 OSX 的 BSD sed
.