V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
cjjia
V2EX  ›  问与答

想要一个处理txt文档的工具或者办法

  •  
  •   cjjia · 2012-07-11 13:14:53 +08:00 · 3669 次点击
    这是一个创建于 4522 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我有1.txt和2.txt两个文档,他们的内容都是一行一行的,有上万行。

    现在我要把1.txt和2.txt进行对比,如果1.txt里面存在192.168.0.1这一行,就搜索2.txt里面存不存在192.168.0.1这一行,如果存在则将其删除。

    就是说把所以1.txt里面存在的内容,将其在2.txt里面删除。

    不知道有没有现成的工具,或者其他软件能曲线实现这个功能,谢谢了。
    13 条回复    1970-01-01 08:00:00 +08:00
    cosbeta
        1
    cosbeta  
       2012-07-11 13:18:13 +08:00   ❤️ 2
    <?php
    $a = file( "1.txt" );
    $b = file_get_contents("2.txt");
    foreach( $a as $line){

    $line = trim($line);
    if( strlen( $line) <1) continue;
    if( substr_count($b,$line) >0) $b = str_replace($line,"",$b);

    }?>

    php代码如上,哈哈,程序没考虑效率,如果文件很大,就会很消耗内存
    lululau
        2
    lululau  
       2012-07-11 13:27:34 +08:00
    grep -vFf 1.txt 2.txt
    cjjia
        3
    cjjia  
    OP
       2012-07-11 13:47:14 +08:00
    @cosbeta 不知道这个怎么用,是把上面的代码放到index.php文档里面,然后上传到php空间吗?然后把1.txt和2.txt上传到同一目录?

    在浏览器打开之后没显示什么,然后下载回来1.txt和2.txt看了一下里面内容没变,是不是服务器缺少什么函数?

    可以加下QQ吗? 如果你帮我解决了 可以适当的付些报酬给你
    cosbeta
        4
    cosbeta  
       2012-07-11 13:56:32 +08:00
    你把两个文件email给我就是 china.cos 在gmaill
    @lululau 的方法匹配太泛了,会误删的呢
    cosbeta
        5
    cosbeta  
       2012-07-11 13:58:53 +08:00
    首先,1.txt和2.txt的权限要对,然后 和php放在同一个目录。 直接运行 php tool.php 假设php文件名是tool.php
    reus
        6
    reus  
       2012-07-11 14:05:43 +08:00
    sort 2.txt 1.txt 1.txt | uniq -u
    forsaken
        7
    forsaken  
       2012-07-11 14:08:18 +08:00
    只能是开发语言来实现,比如php或者ruby或者C吧。软件貌似很少。
    shiny
        8
    shiny  
       2012-07-11 14:18:47 +08:00   ❤️ 1
    <?php
    $a = explode("\n",file_get_contents("1.txt"));
    $b = explode("\n",file_get_contents("2.txt"));
    $c = array_diff($b,$a);
    file_put_contents("3.txt",implode("\n",$c));
    ospider
        9
    ospider  
       2012-07-11 14:24:11 +08:00
    #!/usr/bin/env python
    #coding:utf-8

    file_a = open('1.txt', 'r').readlines()
    file_b = open('2.txt', 'r').readlines()
    new_b = [lb for lb in file_b if lb not in file_a]#遍历2中每一行,看是否在1中存在
    with open('new_2.txt', 'w') as new_file:
    for l in new_b:
    new_file.write(l)
    bullda
        10
    bullda  
       2012-07-11 16:34:29 +08:00
    beyond compare?
    cjjia
        11
    cjjia  
    OP
       2012-07-11 17:16:40 +08:00
    @shiny 谢谢,真的很感谢。代码能用
    HowardMei
        12
    HowardMei  
       2012-07-11 17:33:55 +08:00
    文件所在目录terminal输入:
    awk ' !x[$0]++' 1.txt 2.txt | split -l $(awk 'END { print NR }' 1.txt)
    得到两个新文件,其中一个就是去重后的2.txt
    从服务器bash_proile中拿来的,会用awk的同学应该很容易理解。
    cosbeta
        13
    cosbeta  
       2012-07-11 17:38:45 +08:00
    @HowardMei awk确实是最方便的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 51ms · UTC 22:09 · PVG 06:09 · LAX 14:09 · JFK 17:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.