快速从多个文本文件中移除前n行

3 投票
3 回答
5115 浏览
提问于 2025-04-16 03:01

我需要创建一个输出文本文件,方法是删除输入文件的前两行。

目前我在用这个命令:
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 会慢很多——就像你说的,磁盘的读写速度通常是最大的瓶颈。

撰写回答