忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
1234下一页
最近访问板块 发新帖
查看: 2477 | 回复: 34

[文本处理] 麻烦给去掉指定字符行 [复制链接]

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2017-10-26 09:39 |显示全部楼层



删除指定条件的行
每一行由数字及大小写字母组成,里面没有空格
要求同时满足下面两个条件,就删除该行
1、行中任何位置有 两个及以上 紧靠在一起的纯数字的行(如: dtUV56yfw    123bdtez 等等)
2、行中任何位置有 mn  nm  这两个字母紧靠在一起的(包括纯小写、纯大写、大小写混合)(如: serMNxef    iksNMtazi    3fymN7cw   ue7knMbjq 等等)



麻烦给出效率稍高一点的命令(文档有点大200GB)

辛苦了!




论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:48
发表于 2017-10-26 11:04 |显示全部楼层
本帖最后由 wh7211 于 2017-10-26 17:52 编辑

回复 1# bmne


大文档先切割成小文档,再使用awk或sed处理。
  1. awk 'BEGIN{IGNORECASE=1}$0!~/[0-9]{2}|mn|nm/' file
  2. sed -r '/[0-9]{2}|mn|nm/Id;' file
复制代码

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2017-10-26 11:55 |显示全部楼层
回复 2# wh7211


谢谢大牛


论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2017-10-26 17:45 |显示全部楼层
回复 2# wh7211


awk 'BEGIN{IGNORECASE=1}$0!~/[0-9]{2}|mn|nm/'      这个好,56.5GB的时间

real    21m15.261s
user    20m20.957s
sys     0m14.523s



sed -r '/[0-9]|mn|nm/Id;'       这个不行,一个半小时了,还没出。人工停止



论坛徽章:
2
程序设计版块每日发帖之星
日期:2016-05-03 06:20:0015-16赛季CBA联赛之同曦
日期:2017-09-11 14:39:48
发表于 2017-10-26 17:55 |显示全部楼层
回复 4# bmne


2楼sed那段代码写的不对,已经在2楼改过来了,应该是:sed -r '/[0-9]{2}|mn|nm/Id;' file

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2017-10-26 18:54 |显示全部楼层
回复 5# wh7211



同上面的数据,这个一个小时了,还在运行。手动停止了


这个效率慢


论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2017-10-26 20:03 |显示全部楼层
回复 1# rubyish


如果大牛确实有点时间

烦请再出手给个效率高的脚本

另,我运行出56.5GB的文档只需17分钟,效率神速

如果能再在给个按1楼要求的脚本,很是期望

但,实话,若太忙,就不麻烦你了。


论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-10-28 02:18 |显示全部楼层
回复 7# bmne


shishi~~

shishi.c
  1. # include <stdio.h>
  2. # include <stdlib.h>

  3. /* _____________________ USER _____________________ */
  4. # define LENGTH 16
  5. /* _____________________ END _____________________ */

  6. typedef char kar;
  7. typedef char *str;
  8. typedef unsigned Int;

  9. void explore (str);
  10. /* ____________________ MAIN ____________________ */
  11. int main (int numa, str *para){
  12.     if (numa == 1) {
  13.         printf ("use:\n%s file\n", para[0]);
  14.         exit (1);
  15.     }
  16.     explore (para[1]);
  17. }

  18. /* _____________________ SUB _____________________ */
  19. # define isdigit(X) X < 58
  20. # define END   '\n'
  21. # define BREAK 3

  22. void explore (str data){
  23.     FILE *file = fopen (data, "r");
  24.     kar line[LENGTH];
  25.     int Dit[123] = {
  26.         ['m'] = 1,
  27.         ['M'] = 1,
  28.         ['n'] = 2,
  29.         ['N'] = 2,
  30.     };

  31.     while (fgets (line, LENGTH, file)) {
  32.         str dit  = line;
  33.         int Digi = 0;
  34.         kar Morn = 0;

  35.         while (*dit > END) {
  36.             if (isdigit (*dit)) {
  37.                 if (Digi) break;
  38.                 Digi = 1, Morn = 0, dit++;
  39.                 continue;
  40.             }

  41.             kar morn = Dit[(Int) * dit];
  42.             if ((morn | Morn) == BREAK) break;
  43.             Morn = morn, Digi = 0, dit++;
  44.         }

  45.         if (*dit == END) fputs (line, stdout);
  46.     }

  47. } /* explore */
复制代码

论坛徽章:
31
程序设计版块每日发帖之星
日期:2016-02-06 06:20:00程序设计版块每日发帖之星
日期:2016-07-20 06:20:00程序设计版块每日发帖之星
日期:2016-07-26 06:20:00每日论坛发贴之星
日期:2016-07-26 06:20:00程序设计版块每日发帖之星
日期:2016-07-27 06:20:00每日论坛发贴之星
日期:2016-07-27 06:20:00程序设计版块每日发帖之星
日期:2016-07-28 06:20:00程序设计版块每日发帖之星
日期:2016-07-29 06:20:00程序设计版块每日发帖之星
日期:2016-08-02 06:20:00程序设计版块每日发帖之星
日期:2016-08-06 06:20:00程序设计版块每日发帖之星
日期:2016-08-08 06:20:00程序设计版块每日发帖之星
日期:2016-08-09 06:20:00
发表于 2017-10-28 07:35 |显示全部楼层
回复 8# rubyish


大牛厉害啊

牛人

烦请大牛回答几个基础问题,别笑我,谢谢!

1、同样的文档大小与4楼的awk比较。你的脚本超神速,只用时13分钟。    我的娘哎

2、八楼的脚本。我简单弄了十几行的数据文档测试了下。
         脚本对unix格式文档判断准确。若改换成dos格式的文档后,运行判断出问题,不准确(比如这样的行给过滤掉了  1a2c5tU8  )

3、这个页面的44楼   http://bbs.chinaunix.net/thread-4267655-5-1.html
        请查看里面的  floor42C.c
        我的问题:第189行代码,为什么你只写成  floor42    ?
        我用  floor42.c 与 floor42C.c  (请注意,若这两个不同名字文档里面的要处理的字符不同),进行了比较后,得出结论
        a、若唯一只有floor42C.c这一个名字的文档
            我用
            ./floor42 dlu 8
            ./floor42C dlu 8
            输出是一样的
        b、若同时存在有floor42.c 与 floor42C.c这两个不同名字的文档
            我用
            ./floor42 dlu 8
            ./floor42C dlu 8
            输出是不同的


4、这一项非常重要,上面的可以不用回答,这一项请费心帮助
        在C里面,怎样把 floor42C.c  与 shishi.c  这两个脚本,用“管道”连接在一起,一次性运行,输出结果?
        (如同  awk  ......  file|awk  ...... file2  这种形式)








论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-10-28 08:25 |显示全部楼层
回复 2# wh7211

sed -r '/[0-9]{2}|mn|nm/Id;' file

参数 I
很生,不之是啥意思
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP