免费注册 查看新帖 |

Chinaunix

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

[文本处理] 急,有详细说明,如何用shell分析下面的文本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-08 12:25 |只看该作者 |倒序浏览
文本shell的问题 ,如下,这是一个文本,里面有6个字段,用‘\t'键分割

名称     状态   用户                方式        网址名      其他
aaa        200        asd@139.com        101        163.com        cs
ac        201        dff@139.com        101        163.com        sd
st        200        jfksleaskdfjd        102        163.com        d
sa        200        139@139.com        102        163.com        d
sk        200        139@139.com        102        163.com        d
2o        200        ealy.comdfa        104        aca.cna         df
2p        200        89fj@12.com     a08        edittom        da
sdf        200        89fj@12.com    a08        edittom        ff
dfs        4102        89fj@12.com     a09        edittom        fc

   请教下,如何用shell写出如下的结果
1、查出来第5列当第2列等于200的时候, 即每个“网址名”第三列的用户有多少(要去重)
想要的结果如下:
3 163.com
1  aca.cna
1  edittom
2、在上一题的基础上加个第4列的条件,即查出来第5列当第2列等于200的时候,每个方式下的用户有多少(要去重),
1   101        163.com
2   102        163.com
1   104        aca.cna
1   a08        edittom



论坛徽章:
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
2 [报告]
发表于 2014-05-08 12:54 |只看该作者
回复 1# wzl189189
第一个需求
  1. awk '$2==200{a[$5" "$3]} END{for(i in a){split(i,b," ");count[b[1]]++};for(i in count)print count[i],i}' i
  2. 3 163.com
  3. 1 aca.cna
  4. 1 edittom
复制代码
第二个需求
  1. awk '$2==200{a[$4" "$5" "$3]} END{for(i in a){split(i,b," ");count[b[1]" "b[2]]++};for(i in count)print count[i],i}' i
  2. 1 101 163.com
  3. 2 102 163.com
  4. 1 104 aca.cna
  5. 1 a08 edittom
复制代码

论坛徽章:
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
3 [报告]
发表于 2014-05-08 13:28 |只看该作者
回复 1# wzl189189

$ awk '$2==200{if(!b[$5,$3]++)a[$5]++}END{for(n in a)print a[n],n}' FILE
3 163.com
1 edittom
1 aca.cna

$ awk '$2==200{if(!b[$5,$3]++)a[$4" "$5]++}END{for(n in a)print a[n],n}' FILE
1 101 163.com
1 a08 edittom
1 104 aca.cna
2 102 163.com


   

论坛徽章:
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
4 [报告]
发表于 2014-05-08 13:31 |只看该作者
回复 3# jason680
学习了,是应该用两维数组来实现去除重复的。


   

论坛徽章:
0
5 [报告]
发表于 2014-05-08 17:03 |只看该作者
回复 2# Herowinter

  太感谢了,再增加2个问题
3、查出来第5列当第2列等于200的时候 查出当网址名为163.com时 合并指定的101和103的用户数(要去重)
     
名称     状态         用户                方式            网址名      其他
aaa        200        asd@139.com           101        163.com        cs
ac         201        dff@139.com           101        163.com        sd
skd        200        jfksleaskdfjd  103        163.com        d
skd        200        139@139.com           102        163.com        d
skd        200        139@139.com           102        163.com        d
23d        200        ealy.comdfa           104        aca.cna         df
1d        200        ealy.comdfa           105        aca.cna         df

结果如下:
           2  163.com

4、 当状态==200时,根据网址名,生成文件,文件名是:网址名_+方式,文件内容是根据网址名和方式去重的用户名
结果如下:   
             163.com_101.txt文件的内容为:
             asd@139.com
            
              163.com_102.txt文件的内容为:
              139@139.com

              aca.cna_104.txt文件的内容为:
              ealy.comdfa

   

论坛徽章:
0
6 [报告]
发表于 2014-05-08 17:04 |只看该作者
回复 3# jason680

太感谢了,再增加2个问题
3、查出来第5列当第2列等于200的时候 查出当网址名为163.com时 合并指定的101和103的用户数(要去重)
     
名称     状态         用户                方式            网址名      其他
aaa        200        asd@139.com           101        163.com        cs
ac         201        dff@139.com           101        163.com        sd
skd        200        jfksleaskdfjd  103        163.com        d
skd        200        139@139.com           102        163.com        d
skd        200        139@139.com           102        163.com        d
23d        200        ealy.comdfa           104        aca.cna         df
1d        200        ealy.comdfa           105        aca.cna         df

结果如下:
           2  163.com

4、 当状态==200时,根据网址名,生成文件,文件名是:网址名_+方式,文件内容是根据网址名和方式去重的用户名
结果如下:   
             163.com_101.txt文件的内容为:
             asd@139.com
            
              163.com_102.txt文件的内容为:
              139@139.com

              aca.cna_104.txt文件的内容为:
              ealy.comdfa
   

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
7 [报告]
发表于 2014-05-08 17:16 |只看该作者
此类月经问题绵绵不绝啊。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
8 [报告]
发表于 2014-05-08 17:19 |只看该作者
http://bbs.chinaunix.net/thread-4137519-1-1.html
几天前的贴,一模一样

论坛徽章:
0
9 [报告]
发表于 2014-05-08 17:44 |只看该作者
这里高手多啊,shell脚本对我们初学人来说,还是有些难

论坛徽章:
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
10 [报告]
发表于 2014-05-08 18:30 |只看该作者
回复 5# wzl189189
第三题
  1. awk '$2==200&&$5=="163.com"{if(($4=="101"||$4=="103")&&(!b[$3]++))a[$5]++}END{for(n in a)print a[n],n}' i
  2. 2 163.com
复制代码
第四题
  1. awk '$2==200{f=$5"_"$4".txt";a[f]=$3} END{for(i in a)print a[i]>i}' i
复制代码
第四题,你写的结果不全?我这边是这样的
163.com_101.txt
asd@139.com
aca.cna_105.txt
ealy.comdfa
aca.cna_104.txt
ealy.comdfa
163.com_103.txt
jfksleaskdfjd
163.com_102.txt
139@139.com

另外,弱弱地问句,你不用数据库的吗?



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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP