免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: bikkuri
打印 上一主题 下一主题

[文本处理] 文本处理求助 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
11 [报告]
发表于 2014-08-23 15:28 |只看该作者
回复 10# bikkuri


    可能是 awk 版本问题。我的是 GNU Awk 4.1.1,

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
12 [报告]
发表于 2014-08-23 15:36 |只看该作者
本帖最后由 bikkuri 于 2014-08-23 16:43 编辑

我的版本是3.1.7。
  1. [root@cloudband-be E]# awk --version
  2. GNU Awk 3.1.7
  3. Copyright (C) 1989, 1991-2009 Free Software Foundation.
复制代码
可能是编译的时候没有加--enable-switch选项,所以不支持switch语句。
       If gawk is configured with the --enable-switch option to the configure command, then it accepts  an  additional
       control-flow statement:
              switch (expression) {
              case value|regex : statement
              ...
              [ default: statement ]
              }

       If gawk is configured with the --disable-directories-fatal option, then it will silently skip directories named
       on the command line.  Otherwise, it will do so only if invoked with the --traditional option.



http://stackoverflow.com/questions/11401979/switch-case-doesnt-work-in-awk


用if语句替换掉switch语句后没有出错了,但是输出的结果不正确。
  1. [root@cloudband-be E]# strings E9C79540610 |awk -v OFS="|" -v FPAT='(Date|Username|Password|E-mail):[^N]*' '{for(i=1;i<=NF;i++){if (
  2. $i~/Date/){d=$i;break;}if ($i~/Username/){u=$i;break;}if ($i~/Password/){p=$i;break;}if ($i~/E-mail/)e=$i;}}END{print u,e,p,d}'
  3. Username:||Password:|(UTC)N+Date:
复制代码
  1. [root@cloudband-be E]# strings E9C79540610 |awk -v OFS="|" -v FPAT='(Date|Username|Password|E-mail):[^N]*' '{for(i=1;i<=NF;i++){if (
  2. $i~/Date/){d=$0;break;}if ($i~/Username/){u=$0;break;}if ($i~/Password/){p=$0;break;}if ($i~/E-mail/)e=$0;}}END{print u,e,p,d}'
  3. Username:   kamemiya N$E-mail: kiyoshi.amemiya@ibm.com N||Password: fpMMduNF N|N!Return-Path: <foo@cloud-band.com>N9Received: from c
  4. loudband-be.local (localhost [127.0.0.1])N:     by cloudband-be.local (Postfix) with ESMTP id 571345405FANI     for <kiyoshi.amemiya
  5. @ibm.com>; Fri, 22 Aug 2014 08:21:01 +0000 (UTC)N+Date: Fri, 22 Aug 2014 08:21:01 +0000 (UTC)N
复制代码
看来FPAT也没起作用。
好像FPAT只适用于GNU awk 4 以上版本。



blackold 发表于 2014-08-23 15:28
回复 10# bikkuri

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
13 [报告]
发表于 2014-08-23 17:21 |只看该作者
回复 12# bikkuri

awk 3.x没FPAT.

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
14 [报告]
发表于 2014-08-23 17:54 |只看该作者
可以用 match 来匹配。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
15 [报告]
发表于 2014-08-23 18:07 |只看该作者
怎么做啊?大神教教我,我不会啊。。。

blackold 发表于 2014-08-23 17:54
可以用 match 来匹配。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
16 [报告]
发表于 2014-08-24 09:35 |只看该作者
回复 15# bikkuri


    自己整整啊,try:
  1. awk -v OFS="|" 'match($0,/(Date|Username|Password|E-mail):[^N]*/,a){r[substr(a[0],1,1)]=a[0]}END{print r["U"],r["E"],r["P"],r["D"]}' urfile
复制代码

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
17 [报告]
发表于 2014-08-24 12:12 |只看该作者
谢谢您的指点,您的命令在大多数情况下是可以得到正常输出的,但是碰到了以下一个特殊情况,没有得到正确的输出:
对于源输入中的Password: NVuUCIgb N您的匹配代码match($0,/(Date|Username|Password):[^N]*/,a)在碰到密码中的第一个N字符就当作匹配结束了,所以输出成了:
  1. [root@cloudband-be D]# strings D04E354046A |awk -v OFS="|" 'match($0,/(Date|Username|Password):[^N]*/,a){r[substr(a[0],1,1)]=a[0]}END{print r["U"],r["P"],r["D"]}'
  2. Username:       test |Password: |Date: Fri, 22 Aug 2014 00:53:55 +0000 (UTC)
复制代码
这个正则表达式应该怎么改呢?

回复 16# blackold


   

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
18 [报告]
发表于 2014-08-24 13:53 |只看该作者
  1. $ awk -v OFS="|" 'match($0,/(Date:[^)]*\))|(Username|Password|E-mail): *[^ ]*/,a){r[substr(a[0],1,1)]=a[0]}END{print r["U"],r["E"],r["P"],r["D"]}' urfile
复制代码

论坛徽章:
769
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
19 [报告]
发表于 2014-08-24 14:28 |只看该作者
黑哥出手,分分钟搞定的事。

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
20 [报告]
发表于 2014-08-24 15:30 |只看该作者
本帖最后由 bikkuri 于 2014-08-24 17:00 编辑

这次彻底可以了!
非常感谢!
但是还有另外一个小问题,能请您帮忙看一下这个帖子吗?
http://bbs.chinaunix.net/thread-4151599-1-1.html

回复 18# blackold


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP