我需要通过删除输入文件的前两行来创建输出文本文件。
目前我正在使用 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程序,或者文件写入磁盘访问是否可能成为瓶颈?
答案 0 :(得分:9)
使用tail
。怀疑任何事情都可能明显加快:
tail -n +3 input.txt > output.txt
将它包裹在您选择的循环中。但我真的怀疑sed慢一点 - 正如你所说,磁盘i / o通常是最终的瓶颈。
答案 1 :(得分: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)
答案 2 :(得分:3)
for file in *.ext
do
sed -i.bak -n '3,$p' $file
done
或只是
sed -i.bak -n '3,$p' *.ext