免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 6934 | 回复: 20

[文本处理] 一段文本处理,帮忙(已解决) [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-08-14 21:25 |显示全部楼层
本帖最后由 volwang 于 2013-08-17 06:34 编辑

一段文本如下:
希望得到的结果是:


in 和 out 一般会随机出现,需要匹配apples数和who
有一个in出现就一定有out,这是一一对应的。
恳请大侠帮忙,特求助

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-08-14 22:07 |显示全部楼层
@volwang
  1. $ awk -F'["() ]+' '!/IN|OUT/{a[$2]=$4;next}/OUT/{b[$5" "2]=a[$2]"/"$1}/IN/{b[$5" "3]=a[$2]"/"$1}{c[$5];b[$5" "1]=$4;b[$5" "4]=$5;b[$5" "5]=$6}END{for(i in c){for(j=1;j<=5;j++)printf b[i" "j]" ";print ""}}' file
  2. ASD_FILE 7/26/2013/8:21:35 7/26/2013/8:48:11 dhrvo_12459708425 20
  3. EFG_FILE 7/26/2013/8:53:44 7/26/2013/9:20:42 dhr_12459708425 20
  4. EFG_FILE 7/26/2013/9:50:33 7/27/2013/11:25:08 cdef_WTh790120 30
复制代码

论坛徽章:
1
天蝎座
日期:2013-08-22 15:14:44
发表于 2013-08-15 09:00 |显示全部楼层
awk -F'[ ()"]' '/STEPTIME/{day[$3]=$6}/OUT/{outtime[$9_$12]=day[$3]"/"$1}/IN/{if(outtime[$9_$12]) records[i++]=$7 OFS outtime[$9_$12] OFS day[$3]"/"$1 OFS $9 OFS $12} END{for(i in records) print records[i]}' test.log         

ASD_FILE 7/26/2013/8:21:35 7/26/2013/8:48:11 dhrvo_12459708425 20
EFG_FILE 7/26/2013/8:53:44 7/26/2013/9:20:42 dhr_12459708425 20                                                                                                                           
EFG_FILE 7/26/2013/9:50:33 7/27/2013/11:25:08 cdef_WTh790120 30

论坛徽章:
1
天蝎座
日期:2013-08-22 15:14:44
发表于 2013-08-15 09:06 |显示全部楼层
awk -F'[ "()]+' '/STEPTIME/{day[$2]=$4}/OUT/{outtime[$5_$6]=day[$2]"/"$1}/IN/{if(outtime[$5_$6]) records[i++]=$4 OFS outtime[$5_$6] OFS day[$2]"/"$1 OFS $5 OFS $6} END{for(i in records) print records[i]}' test.log
ASD_FILE 7/26/2013/8:21:35 7/26/2013/8:48:11 dhrvo_12459708425 20
EFG_FILE 7/26/2013/8:53:44 7/26/2013/9:20:42 dhr_12459708425 20                                                                                                                           
EFG_FILE 7/26/2013/9:50:33 7/27/2013/11:25:08 cdef_WTh790120 30

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-08-15 15:14 |显示全部楼层
本帖最后由 volwang 于 2013-08-17 06:36 编辑

回复 2# cao627


谢谢你的回复。
实际上这样的文本是按照时间日期依次递增的。
文本内容很多,我只是窃取了一部分
我觉得是不是这样:
先找到out行,找到还有关键字,例如 时间,EFG_FILE  cdef_WTh790120  40 apples等。
在out行往上查找out出现的日期。
然后往下找和EFG_FILE  cdef_WTh790120  40 apples匹配的 in 所在的行,在找到in 行出现的时间。
在in往上查找到in 出现的日期。






   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-08-15 19:00 |显示全部楼层
@volwang
之前写的命令只考虑到每个“who”只out in一次,而且写的也比较冗余。

如果每一对OUT / IN     OUT都出现在IN之前的话:
  1. $ awk -F'["() ]+' '!/IN|OUT/{a[$2]=$4;next}/OUT/{b[$5]=a[$2]"/"$1}/IN/{print $4" "b[$5]" "a[$2]"/"$1" "$5" "$6}' file
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-08-15 19:24 |显示全部楼层
in和out可能会交替出现。
out之后,一定匹配与之对应的in。


回复 6# cao627


   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-08-15 19:52 |显示全部楼层
out之后,一定匹配与之对应的in

这样的话6楼的代码应该没问题。
@volwang

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-08-15 20:13 |显示全部楼层
本帖最后由 volwang 于 2013-08-17 06:36 编辑

回复 8# cao627

我自己把文本修改的更加好处理一些了:
现在需要处理的脚本是:

   

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
发表于 2013-08-15 21:14 |显示全部楼层
本帖最后由 cao627 于 2013-08-15 21:25 编辑
  1. $ cat file1
  2. N: 7/25/2013 8:40:27 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  3. OUT: 7/25/2013 8:48:36 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  4. IN: 7/25/2013 8:53:58 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  5. OUT: 7/25/2013 8:58:06 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  6. OUT: 7/25/2013 9:01:37 "WDG_FILE" itjtm_WTH5400520  40
  7. OUT: 7/25/2013 9:01:55 "WDG_FILE" itjtm_WTH5400520  20
  8. OUT: 7/25/2013 9:02:14 "WDG_FILE" itjtm_WTH5400520  20
  9. IN: 7/25/2013 9:11:34 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  10. OUT: 7/25/2013 9:14:28 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  11. IN: 7/25/2013 9:41:07 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  12. OUT: 7/25/2013 10:18:09 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  13. IN: 7/25/2013 10:39:31 "WDG_FILE" itjtm_WTH5400520  20
  14. IN: 7/25/2013 10:39:31 "WDG_FILE" itjtm_WTH5400520  40
  15. IN: 7/25/2013 10:39:31 "WDG_FILE" itjtm_WTH5400520  20
  16. IN: 7/25/2013 10:44:35 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  17. OUT: 7/25/2013 10:56:38 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  18. IN: 7/25/2013 11:15:58 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  19. OUT: 7/25/2013 11:18:17 "WDG_FILE" fdhfdg_fefrgjrh790306  20
  20. OUT: 7/25/2013 11:34:47 "WDG_FILE" itjtm_WTH5400520  14
  21. IN: 7/25/2013 11:44:21 "WDG_FILE" fdhfdg_fefrgjrh790306  20

  22. awk -F'[" ]+' '/OUT/{a[$1$5$6]=$2"/"$3}/IN/{print $4" "a[$1$5$6]" "$2"/"$3"   "$5" "$6}' file1
  23. WDG_FILE  7/25/2013/8:53:58   fdhfdg_fefrgjrh790306 20
  24. WDG_FILE  7/25/2013/9:11:34   fdhfdg_fefrgjrh790306 20
  25. WDG_FILE  7/25/2013/9:41:07   fdhfdg_fefrgjrh790306 20
  26. WDG_FILE  7/25/2013/10:39:31   itjtm_WTH5400520 20
  27. WDG_FILE  7/25/2013/10:39:31   itjtm_WTH5400520 40
  28. WDG_FILE  7/25/2013/10:39:31   itjtm_WTH5400520 20
  29. WDG_FILE  7/25/2013/10:44:35   fdhfdg_fefrgjrh790306 20
  30. WDG_FILE  7/25/2013/11:15:58   fdhfdg_fefrgjrh790306 20
  31. WDG_FILE  7/25/2013/11:44:21   fdhfdg_fefrgjrh790306 20
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP