`

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

阅读更多

一个大型文件(总之不<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;
}

分享到:
评论

相关推荐

    文本文件中删除某一行怎么实现

    文本文件中删除某一行的实现方法 在 C++ 编程中,删除文本文件中的某一行是一种常见的操作。下面将详细介绍两种实现方法。...在删除文本文件中的某一行时,可以根据实际情况选择合适的方法,以达到最佳的效率和效果。

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

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

    可实现hex文件三种方式的合并1,简单复制合并2,删除最后一行hex文件后合并3同时实现前两种形式同时合并

    因为Hex文件的每一行都有地址信息,删除最后一行意味着第二个文件的地址范围不会与第一个文件重叠。然而,这仅适用于第二个文件的地址序列紧接着第一个文件的末尾,且没有数据覆盖的情况。 3. **同时实现前两种形式...

    文本文件,删除重复行

    本主题聚焦于一个特定的问题:如何高效地删除文本文件中的重复行。标题"文本文件,删除重复行"提示我们关注的核心是解决大规模文本文件中重复数据的消除问题。 描述中提到,该程序能够在0.3秒内处理含有100万行、...

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

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

    删除文本文件中多余的空行

    总之,删除文本文件中的多余空行是一项常见的文档整理任务,通过使用批处理文件等工具,我们可以快速、高效地完成这项工作,提升文档的整洁度和打印效率。在实际应用中,根据具体情况选择适合的工具和方法,能够更好...

    删除重复文本程序-删除重复文本程序

    总的来说,这个“删除重复文本程序”是C++编程在文本处理领域的实际应用,通过高效的算法和数据结构实现快速查找和删除文本文件中的重复行,简化了文本处理任务,对于需要处理大量文本数据的工作环境具有很高的实用...

    删除特定行文本的文本处理工具

    本篇文章将深入探讨一款名为"删除特定行文本的文本处理工具",该工具专注于帮助用户批量删除文本文件中特定条件的行,如所有包含特定字符串(如“AA”)的行,为数据预处理提供了极大的便利。 首先,让我们了解什么...

    文本文件去重复行工具

    这个小工具的核心功能是读取文本文件,对每一行进行比较,找出并删除重复的行。它可能采用了哈希表或布隆过滤器等数据结构来快速检查行的唯一性。哈希表可以将每一行映射到一个唯一的数值,通过比较这些数值来判断行...

    BAT批处理脚本-文本操作-多行文本拼接成一行.cmd.zip

    在"多行文本拼接成一行.cmd.txt"脚本中,可能包含这样的逻辑:先使用`TYPE`命令读取多行文本文件,然后通过某种方式(如`FINDSTR`或`FOR /F`循环)将这些行合并成一个字符串,最后利用`ECHO`命令将结果写入一个新的...

    文本编辑器支持查找删除等多功能操作

    文本编辑器是计算机科学领域中不可或缺的工具,它允许用户创建、查看、修改以及管理文本文件。在日常的编程、文档编写或者简单的文本处理任务中,我们常常会使用到这样的软件。本文将深入探讨文本编辑器的主要功能,...

    超大文本文件查看编辑器

    1. **快速打开**:这类编辑器采用了高效的文件读取算法,能够在短时间内加载上GB大小的文本文件,极大地提高了工作效率。它能够避免因文件过大导致的系统资源占用过高,使得用户无需等待长时间的加载过程。 2. **...

    文本比较器(可分析两个纯文本文件的异同)

    通过使用特定的算法,这些工具能够高效地对比两个文件的每一行甚至每一个字符,找出它们之间的异同。在显示结果时,通常会用不同颜色的字体来区分相同的文本和不同的文本,以便用户直观地识别出两文件的差异部分。...

    易语言去除文本空行源码【多思路】

    在文本文件中,空行通常是由两个或多个连续的换行符(\n)或者回车换行符(\r\n)构成的。在易语言中,我们可以使用字符串处理函数来识别并删除这些空行。 **思路一:基于字符串替换** 最直观的方法是遍历文本,...

Global site tag (gtag.js) - Google Analytics