n
여러 줄이 포함된 대용량 파일(여러 공연)이 있다고 가정해 보겠습니다 . k
파일 시작 부분에서 바이트 오프셋 뒤에 줄을 추가/삽입 하고 싶습니다 . 이를 달성하는 가장 빠른 방법은 무엇입니까?
답변1
다음은 Python 솔루션입니다.
#!/usr/bin/env python3
# -*- encoding: utf-8 -*-
"""split_bytes.py"""
import os
import sys
stdout = os.fdopen(sys.stdout.fileno(), 'wb')
path_to_file = sys.argv[1]
width_in_bytes = int(sys.argv[2])
with open(path_to_file, "rb") as f:
byte = f.read(1)
while byte:
for i in range(width_in_bytes):
stdout.write(byte)
byte = f.read(1)
stdout.write(b"\n")
다음과 같이 실행할 수 있습니다.
python split_bytes.py path/to/file offset > new_file
테스트로 1GB의 무작위 데이터 파일을 생성했습니다.
dd if=/dev/urandom of=data.bin bs=64M count=16 iflag=fullblock
그런 다음 해당 파일에 대해 스크립트를 실행합니다.
python split_lines.py data.bin 10 > split-data.bin
답변2
ㅏ세게 때리다유일한 해결책:
분할 명령을 사용하십시오.
split --lines=2 --suffix-length=6 /etc/passwd /tmp/split.passwd.part
파일을 새 파일로 재조립
(
for F in /tmp/split.passwd.part* ;
do
cat $F ;
echo ;
done
) > /tmp/passwd_emptyline_evrey_2