免费注册 查看新帖 |

Chinaunix

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

求助:这样需求的awk咋写呀! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-15 11:20 |只看该作者 |倒序浏览
本帖最后由 sundful 于 2011-08-15 11:24 编辑

问题描述:
文件夹里有如下规则的txt文件
20110701.txt
20110702.txt
20110703.txt
20110704.txt
等等,一直到现在
20110815.txt
每个txt文件里的内容格式如下:
  1. imf|200|18236333123
  2. ist_info|200|13831172190
  3. imf_tp_fmon0|200|18236333123
  4. ist_info|200|13590017435
  5. ist_space|200|15207597209
  6. ist_d|200|18735231042
  7. ist_d|200|13402800117
  8. ist_space|200|18775086719
  9. imf|200|13913961014
  10. ist_d|200|13617085432
  11. ist_d|200|15154423696
  12. imf|200|13604095370
  13. ist_139|200|13911065907
  14. imf|200|18725722055
  15. ist_139|200|15047957936
  16. ist_space|200|15275704906
  17. imf|200|15255293370
  18. ist_139|912|13410164424
  19. ist_d|200|15107485364
  20. imf|200|15952081622
  21. ist_d|200|15135159679
  22. ist_139|200|18773883866
  23. imf_tp_space|200|13839318084
  24. ist_info|200|15086802022
  25. ist_info|200|13685513799
  26. ist_wap.henan|912|13478012158
  27. dir_2|200|13857511052
  28. imf_tp_fmon0|200|13532242578
  29. ist_addf|499|18784329394
  30. imf|200|13622904696
  31. ist_info|200|18734896587
复制代码
里面是以“|”分割的串,第一个参数是关键字,第二个参数是状态码,第三个参数是手机号
现在想写个awk,完成如下操作,通过读入一个时间区间的文件,计算一个关键字的访问pv,uv
1.需要传入四个参数,第一个是关键字,第二个是状态码,第三个是开始时间,第四个是结束时间

比如:./test.sh imf 200 20110701 20110716
会循环读入20110701.txt到20110716这16个txt文件做统计,关键字是imf 且状态是200的
最后输出未去重复和去重复的数量,并输出手机号!

不知道我描述的清不清楚,希望高手帮忙看看咋写!

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
2 [报告]
发表于 2011-08-17 15:40 |只看该作者
先给出第一步
  1. for date in `seq $3 $4`
  2. do
  3.   if [ -f ${date}.txt ]; then
  4.       awk -v key=$1 -v code=$2 '$1==key&&$2==code' FS="|" OFS="|" ${date}.txt
  5.   fi
  6. done > result.txt
复制代码
但不理解 “最后输出未去重复和去重复的数量,并输出手机号!”, 请在详细说明。

论坛徽章:
0
3 [报告]
发表于 2011-08-17 15:49 |只看该作者
重复的标准请说明

还有手机号是不是就是去重后的手机号清单

论坛徽章:
0
4 [报告]
发表于 2011-08-17 16:03 |只看该作者
  1. ywlscpl@ubuntu:~$ cat 20110701.txt
  2. imf|200|18236333123
  3. ist_info|200|13831172190
  4. imf_tp_fmon0|200|18236333123
  5. ist_info|200|13590017435
  6. ist_space|200|15207597209
  7. ist_d|200|18735231042
  8. ist_d|200|13402800117
  9. ist_space|200|18775086719
  10. imf|200|13913961014
  11. ist_d|200|13617085432
  12. ist_d|200|15154423696
  13. imf|200|13604095370
  14. ist_139|200|13911065907
  15. imf|200|18725722055
  16. ist_139|200|15047957936
  17. ist_space|200|15275704906
  18. imf|200|15255293370
  19. ist_139|912|13410164424
  20. ist_d|200|15107485364
  21. imf|200|15952081622
  22. ist_d|200|15135159679
  23. ist_139|200|18773883866
  24. imf_tp_space|200|13839318084
  25. ist_info|200|15086802022
  26. ist_info|200|13685513799
  27. ist_wap.henan|912|13478012158
  28. dir_2|200|13857511052
  29. imf_tp_fmon0|200|13532242578
  30. ist_addf|499|18784329394
  31. imf|200|13622904696
  32. ist_info|200|18734896587
  33. ywlscpl@ubuntu:~$ cat 20110702.txt
  34. imf|200|18236333123
  35. ist_info|200|13831172190
  36. imf_tp_fmon0|200|18236333123
  37. ist_info|200|13590017435
  38. ist_space|200|15207597209
  39. ist_d|200|18735231042
  40. ist_d|200|13402800117
  41. ist_space|200|18775086719
  42. imf|200|13913961014
  43. ist_d|200|13617085432
  44. ist_d|200|15154423696
  45. imf|200|13604095370
  46. ist_139|200|13911065907
  47. imf|200|18725722055
  48. ist_139|200|15047957936
  49. ist_space|200|15275704906
  50. imf|200|15255293370
  51. ist_139|912|13410164424
  52. ist_d|200|15107485364
  53. imf|200|15952081622
  54. ist_d|200|15135159679
  55. ist_139|200|18773883866
  56. imf_tp_space|200|13839318084
  57. ist_info|200|15086802022
  58. ist_info|200|13685513799
  59. ist_wap.henan|912|13478012158
  60. dir_2|200|13857511052
  61. imf_tp_fmon0|200|13532242578
  62. ist_addf|499|18784329394
  63. imf|200|13622904696
  64. ist_info|200|18734896587
  65. ywlscpl@ubuntu:~$ cat my.sh
  66. #!/bin/bash
  67. awk -F '|' -v key=$1 -v s=$2 -v t1=$3 -v t2=$4 '$1~key&&$2==s&&FILENAME+0>=t1&&FILENAME+0<=t2{c1++;if (!a[$3]++) c2++}END{print c1,c2;for (i in a) print i}' 2*.txt

  68. ywlscpl@ubuntu:~$ ./my.sh imf 200 20110701 20110701
  69. 10 9
  70. 13622904696
  71. 13532242578
  72. 15255293370
  73. 18725722055
  74. 13913961014
  75. 18236333123
  76. 15952081622
  77. 13839318084
  78. 13604095370
  79. ywlscpl@ubuntu:~$ ./my.sh imf 200 20110701 20110702
  80. 20 9
  81. 13622904696
  82. 13532242578
  83. 15255293370
  84. 18725722055
  85. 13913961014
  86. 18236333123
  87. 15952081622
  88. 13839318084
  89. 13604095370
  90. ywlscpl@ubuntu:~$
复制代码

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
5 [报告]
发表于 2011-08-17 16:22 |只看该作者
这题看着这么眼熟啊,你问过几次了?

论坛徽章:
0
6 [报告]
发表于 2011-08-18 09:36 |只看该作者
awk -F '|' -v key=$1 -v s=$2 -v t1=$3 -v t2=$4 '$1~key&&$2==s&&FILENAME+0>=t1&&FILENAME+0<=t2{c1++;if (!a[$3]++) c2++}END{print c1,c2;for (i in a) print i}' 2*.txt 谁能解释下if中的条件啊,看不懂

论坛徽章:
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
7 [报告]
发表于 2011-08-18 10:24 |只看该作者
awk -F '|' -v key=$1 -v s=$2 -v t1=$3 -v t2=$4 '$1~key&&$2==s&&FILENAME+0>=t1&&FILENAME+0
heylsitan12 发表于 2011-08-18 09:36


经典去重的語法...
if (!a[$3]++)  ...
==============
3为资料 abc, 123,...
1. xx abc
2. xx 123
3. xx abc
4. xx 123
5. xx abc
...

if (!a[$3]++)  ...
1. a[abc] 初始为0, ! a[abc]则if 为True, a[abc]++ 最后a[abc] = 1
2. a[123] 初始为0, ! a[123]则if 为True, a[123]++ 最后a[123] = 1
3. a[abc] =1, ! a[abc]则if 为False, a[abc]++ 最后a[abc] = 2
4. a[123] =1, ! a[123]则if 为Flase, a[123]++ 最后a[123] = 2
5. a[abc] =2, ! a[abc]则if 为False, a[abc]++ 最后a[abc] = 3
只有第一次出现时,if才为True. 经典去重的語法...

评分

参与人数 1可用积分 +4 收起 理由
rdcwayx + 4 感谢分享

查看全部评分

论坛徽章:
0
8 [报告]
发表于 2011-08-19 10:33 |只看该作者
非常感谢大家!!~~!

论坛徽章:
0
9 [报告]
发表于 2011-08-19 10:35 |只看该作者
回复 5# xinglu1983
数据是一个,但是解决的问题不一样,呵呵!谢谢你
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP