免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6715 | 回复: 13
打印 上一主题 下一主题

[文本处理] grep得到的结果再处理 [复制链接]

论坛徽章:
8
戌狗
日期:2013-10-12 11:37:19双子座
日期:2014-05-06 14:40:39巨蟹座
日期:2014-06-14 09:22:18戌狗
日期:2014-09-18 16:05:44巨蟹座
日期:2014-12-27 16:37:26酉鸡
日期:2015-01-20 18:39:022015年亚洲杯之沙特阿拉伯
日期:2015-04-20 22:38:242015亚冠之萨济拖拉机
日期:2015-06-19 16:01:03
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-20 19:34 |只看该作者 |正序浏览
本帖最后由 prcardin 于 2015-04-30 10:01 编辑

grep得到的结果再处理
grep "dostr"  $dir/*.txt


action:dostr,m_uno:yx_hlld_93325534096,u_no:555523245,qd:yx.zhuanfa,plat:ANDROID,udno:d657c535-3avb-37bn-67ad-676689wer,server:10010,name_name:ither,ip:192.18.48.56
,dostr_time:2014-10-01 01:54:24,name_exp:0987015,mi:100,currency:CNY,amount:1000,dostr_channel:HGFG,dono:5476_001_57788563424_89471819952885,qd_dono:a54bnt


类似上面的数据,grep “dostr”获得的。现在想获得下面的数据,
2014-10-01 01:54:24        555523245        100        5476_001_57788563424_89471819952885        a54bnt
dostr_time                u_no                mi        dono                                        qd_dono
比如获取,qd_dono,grep -oP '(?<=qd_dono)\w+'.其他也可以这样获取。但是我想让他生成一行输出。请教下这怎么弄?awk数组还没找到思路

论坛徽章:
0
14 [报告]
发表于 2015-04-26 18:17 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
13 [报告]
发表于 2015-04-21 23:57 |只看该作者
回复 9# prcardin


    时间里面的:符号没注意,改一点就好了:
perl -lane '@tmp_list1=split/,/,$_;foreach $tmp_val (@tmp_list1){@tmp_list2=split/:/,$tmp_val,2;$tmp_hash{$tmp_list2[0]}=$tmp_list2[1];}print "$tmp_hash{dostr_time}\t$tmp_hash{u_no}\t$tmp_hash{mi}\t$tmp_hash{dono}\t$tmp_hash{qd_dono}"'  file


split/:/,$tmp_val,2   这里加以下就行了。

论坛徽章:
780
金牛座
日期: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
12 [报告]
发表于 2015-04-21 12:01 |只看该作者
回复 10# prcardin
多行时忘了初始化s, 改了下, 这样好一点.
  1. awk -F, 'BEGIN{head="dostr_time\tu_no\tmi\tdono\tqd_dono";l=split(head,a,"\t");for(i=1;i<=l;i++)b[a[i]]} {for(i=1;i<=NF;i++){p=index($i,":");k=substr($i,1,p-1);v=substr($i,p+1);if(k in b)b[k]=v};s="";for(i=1;i<=l;i++)s=length(s)?s"\t"b[a[i]]:b[a[i]];print s;print head}'
复制代码

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
11 [报告]
发表于 2015-04-21 10:42 |只看该作者
回复 8# prcardin

Would you give us the real data and what you want? thank you!!!
   

论坛徽章:
8
戌狗
日期:2013-10-12 11:37:19双子座
日期:2014-05-06 14:40:39巨蟹座
日期:2014-06-14 09:22:18戌狗
日期:2014-09-18 16:05:44巨蟹座
日期:2014-12-27 16:37:26酉鸡
日期:2015-01-20 18:39:022015年亚洲杯之沙特阿拉伯
日期:2015-04-20 22:38:242015亚冠之萨济拖拉机
日期:2015-06-19 16:01:03
10 [报告]
发表于 2015-04-21 10:02 |只看该作者
谢谢,多行数据后输出在一行了,后面加了个xargs -n6得到了想要的数据了
回复 3# Herowinter


   

论坛徽章:
8
戌狗
日期:2013-10-12 11:37:19双子座
日期:2014-05-06 14:40:39巨蟹座
日期:2014-06-14 09:22:18戌狗
日期:2014-09-18 16:05:44巨蟹座
日期:2014-12-27 16:37:26酉鸡
日期:2015-01-20 18:39:022015年亚洲杯之沙特阿拉伯
日期:2015-04-20 22:38:242015亚冠之萨济拖拉机
日期:2015-06-19 16:01:03
9 [报告]
发表于 2015-04-21 09:53 |只看该作者
谢谢指教,在时间输出那块只得到了 2014-10-01 20,分钟和秒没有得到。其他4块输出是对的。
回复 7# 程序猿zy


   

论坛徽章:
8
戌狗
日期:2013-10-12 11:37:19双子座
日期:2014-05-06 14:40:39巨蟹座
日期:2014-06-14 09:22:18戌狗
日期:2014-09-18 16:05:44巨蟹座
日期:2014-12-27 16:37:26酉鸡
日期:2015-01-20 18:39:022015年亚洲杯之沙特阿拉伯
日期:2015-04-20 22:38:242015亚冠之萨济拖拉机
日期:2015-06-19 16:01:03
8 [报告]
发表于 2015-04-21 09:51 |只看该作者
谢谢680.输出数据和格式是可以的。但是源数据很多条,出来却只有一条的~  
awk ‘/dostr/’  会有很多条,最后输出的数据也应该是很多条,只出来了一条数据
回复 5# jason680


   

论坛徽章:
0
7 [报告]
发表于 2015-04-20 23:37 |只看该作者
perl -lane '@tmp_list1=split/,/,$_;foreach $tmp_val (@tmp_list1){@tmp_list2=split/:/,$tmp_val;$t_hash{$tmp_list2[0]}=$tmp_list2[1];}print "$t_hash{dostr_time}\t$t_hash{u_no}\t$t_hash{mi}\t$t_hash{dono}\t$t_hash{qd_dono}"'  file

file就是你grep出来的东西

论坛徽章:
780
金牛座
日期: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
6 [报告]
发表于 2015-04-20 23:06 |只看该作者
回复 5# jason680

这个index用得很好啊,向大神学习了。
   
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP