![如何在文件中的某些字节后插入一行](https://linux22.com/image/149702/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%9F%90%E4%BA%9B%E5%AD%97%E8%8A%82%E5%90%8E%E6%8F%92%E5%85%A5%E4%B8%80%E8%A1%8C.png)
假设我有一个大文件(几个演出),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
A巴什唯一的解决方案:
使用分割命令:
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