快速从多个文本文件中移除前n行
我需要创建一个输出文本文件,方法是删除输入文件的前两行。
目前我在用这个命令:
sed "1,2d" input.txt > output.txt
但是我需要对成千上万个文件进行这个操作,所以我在用Python:
import os
for filename in somelist:
os.system('sed "1,2d" %s-in.txt > %s-out.txt'%(filename,filename))
不过这样速度比较慢。
我需要保留原始文件,所以不能直接在原文件上修改。
有没有更快的方法?可以用其他工具而不是sed吗?或者用其他脚本语言代替Python?写一个简单的C程序值得吗,还是说写文件的时候磁盘访问速度可能会成为瓶颈?
3 个回答
3
for file in *.ext
do
sed -i.bak -n '3,$p' $file
done
或者直接
sed -i.bak -n '3,$p' *.ext
4
我觉得这样会比启动sed要快:
import os
import shutil
path = '/some/path/to/files/'
for filename in os.listdir(path):
basename, ext = os.path.splitext(filename)
fullname = os.path.join(path, filename)
newname = os.path.join(path, basename + '-out' + ext)
with open(fullname) as read:
#skip first two lines
for n in xrange(2):
read.readline()
# hand the rest to shutil.copyfileobj
with open(newname, 'w') as write:
shutil.copyfileobj(read, write)
10
使用 tail
命令。怀疑有什么东西能快得多:
tail -n +3 input.txt > output.txt
把它放在你选择的循环里。不过我真的怀疑 sed
会慢很多——就像你说的,磁盘的读写速度通常是最大的瓶颈。