`

高效率删除文本文件的最后一行

阅读更多

一个大型文件(总之不<wbr>小),要求删除该文件<wbr>的最后一行,求一种效<wbr>率比较高的解决方法。</wbr></wbr></wbr>

测试用的文本文件800M
1.用sed解决,此法最易想,但也是最笨的一个,
<wbr>解决方法来自问题的提出者:<br> sed -e '$d' input.file &gt; output.file<br> 用time测试了一下,效率是相当的低!<br> real    2m51.099s<br> user    2m1.268s<br> sys    0m4.260s<br> 2.用head解决,此法比sed有一个质的的提升,<wbr>提升来自增大了缓存,不过依然没有抓住问题的本质,<wbr>还是做了不少无用功!解决方法来时cu上的热心网友。<br> head -n-1 input.file &gt; output.file<br> real    0m23.687s<br> user    0m0.212s<br> sys    0m4.668s<br> 3.用vim解决,此法很别处心裁,<wbr>这应该是遇到这个问题的最先想到的一种。<wbr>解决方法来自我加的unix like群里的一个叫石仔的管理员!<br> vim + result<br> dd<br> 这个没测试,感觉效率和head法差不多,加载太慢!<br> 4.重量级要到场了,感谢cu版主的这个脚本,<wbr>只能用四个字形容!五体投地!<br> :|dd of=input.file seek=1 bs=$(($(find input.file -printf "%s")-$(tail -1 input.file|wc -c)))<br> 或者是<br><font face="FixedSys ">:|dd of=input.file seek=1 bs=$(($(stat -c%s input.file)-$(tail -1 input.file|wc -c)))</font><br> 测试了一下!<br> real    0m0.123s<br> user    0m0.004s<br> sys    0m0.012s<br> 5.感觉这个用c写效率最高,但显然,代码也是最长的,<wbr>我实现了代码,<br> 测试了一下,<br> real    0m0.002s<br> user    0m0.000s<br> sys    0m0.000s<br> 代码如下:<br></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <stdlib.h>

#define GUESS_LINE_SIZE 80
int get_line_size(char *ptr);

int
main(int argc, char *argv[])
{
    char buf[GUESS_LINE_SIZE];
    int line_len, fd;
    struct stat stat_buf;
   
    fd = open(argv[1], O_RDWR);
    lstat(argv[1], &stat_buf);
    lseek(fd, -GUESS_LINE_SIZE, SEEK_END);
    read(fd, buf, GUESS_LINE_SIZE) ;
    line_len = get_line_size(buf);
    truncate(argv[1], stat_buf.st_size - line_len);
   
    exit(0);
}

int
get_line_size(char *ptr)
{
    int line_len = 0, i = GUESS_LINE_SIZE - 2;/*buf中的最后一个字符为'\n'*/
   
    while (*(ptr + i) != '\n') {
        //printf("%c", *(ptr + i));

        i--;
        line_len++;
    }
    return line_len;
}

分享到:
评论

相关推荐

    海鸥txt文本删除重复行 v3.8.zip

    海鸥文本删除重复行软件是一个可以高效率地删除重复行和空行的小工具。是一款Windows操作系统下的简单实用、美观免费的文本删除重复行软件。所有功能集成在同一界面实现,易于操作和使用。而且它是一款绿色软件,...

    vb源码 删除文本文件重复行

    删除文本文件重复行,效率很高,40万行的数据,在我的电脑上只用了40秒 请注意:在输入文件中不能有空行,否则会出错 另外,里边用上了自编获取文件路径名和扩展名函数 发布前专门测试通过,有需要的朋友可以直接...

    大文本缓存读取Unicode逐行转UTF-8存储

    题目:用VC6.0实现对unicode格式的文本文件高效率按行读取 要求: (1)实现以下接口 BOOL OpenStringFile(CString path); BOOL ReadStringFile(&CString str); //一次读取文件中的一行 BOOL CloseStringFile(); (2...

    Vs2008快捷键和技巧文本

    3,复制或删除一行代码时,不用先选择它 如果你想复制一行代码,你只需要简单的按CTRL+c拷贝,然后按CTRL+v粘贴这行就可以了,而不需要选择整行的代码。如果你想删除一行代码,只需按CTRL+x就可以了。 4,取代其他...

    精易模块源码V6.8.0

    3、新增“文本_取指定文件文本行1”,“文本_取指定变量文本行1”替换分割方式调用寻找文本来获取指定数据;感谢【@jr21066 】提供源码。4、新增“文本_删除指定文件文本行1”,“文本_删除指定变量文本行1”新方式...

    Excel VBA实用技巧大全 附书源码

    04046引用输入了任何内容的最后一行单元格(多列情况之一) 04047引用输入了公式或值的最后一行单元格(多列情况之二) 04048引用输入了任何内容的最后一列单元格(单行情况之一) 04049引用输入了公式或值的最后一...

    文本代码编辑器 Text Editor Pro 15.1.0 + x64.zip

    你可以使用标签页的方式在Text Editor Pro中打开多个文本文件。 4、侧边栏功能,【视图】-【路径】功能可以在侧栏中显示指定路径,方便你管理和打开路径中的多个文本。 5、语法高亮。如果你使用 Text Editor Pro ...

    Wim编辑器精通之路

     Vim(和Vi)一个最大的优势在于, 它最常用的命令都是简单的字符, 这比起使用复杂的控制组合键要快得多, 而且也解放了手指的大量工作, 学习使用这些命令的时间很快就能从由此带给你的高效率中得到回报. 另外, 与Vi...

    精易模块[源码] V5.15

    9、改善“网页_访问”中最后一个参数(代理地址)为“”符号时无法访问网页,感谢易友【z00544】反馈。 精易模块 V3.82 what’s new:(20140816) 1、修复“时间_取现行时间戳”有时不能正常返回13位时间戳,当...

    手机 pdf 阅读器

    由于将来手机的键值映射种类会越来越多,因此,用户可以自己保存映射,请新建一个keymap.rc文件,如果没有设置过系统路径,请放在最后一个盘的根目录下,或者放在系统路径的根目录下,Anyview启动时会从keymap.rc...

    WINRAR5.0正式注册版

    不过,最好的恢复性能和效率是压缩文件没有删除和插入存在,包括受损区域的所有数 据保持原来的位置。因此,如果你使用一些特殊的软件从损坏的媒介复制压缩文件,最好 选择以零或任何其他数据填充受损区域的模式,...

    强悍文本编辑器 - Notepad++ v5.3 Final 多国语言版

    ①、内置支持多达 27 种语法高亮度显示(囊括各种常见的源代码、脚本,值得一提的是,完美支持 .nfo 文件查看),也支持自定义语言; ②、可自动检测文件类型,根据关键字显示节点,节点可自由折叠/打开,代码显示得...

    EXCEL集成工具箱V6.0

    最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    8.5.4 例2:从下一行中返回一个值 204 8.6 First_value和Last_value 205 8.6.1 例子:使用First_value来计算最大值 206 8.6.2 例子:使用Last_value来计算最小值 207 8.7 其他分析函数 207 8.7.1 Nth_value(11...

    全能字符串批量替换机7.0

    除了文本文件,甚至还支持在office文档中替换和查找;可以说,本软件在类似软件中,功能的独特和强大达到了很高的程度,希望成为您手头一款常用工具。  本软件在准确和全面的基础上,按特定模式快速进行文件内容的...

    Linux操作系统基础教程

    Linux的核心具有 Windows 无法比拟的稳定性和高效率,在不使用 X Windows 的情况 下,它占用系统资源较少,可以使一台 Intel486摇身一变成为高效工作站。对于想要学习 UNIX的用户来说,使他们熟悉 UNIX 操作环境,...

    EXCEL集成工具箱V8.0完整增强版(精简)

    最大的优点是将指定的任意区域按每个存储格内容为一行加入到当前批注中,允许批注内容中是否显示行号。 【连接字符串】 可视化地窗体连接字符串功能。能将最多三个任意区域存储格(或列)的内容按自定的分隔符号...

Global site tag (gtag.js) - Google Analytics