如何用shell脚本实现下列功能

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:47:03
有一个日志文件,内容如下:
20-May-2009 14:06:29.882 queries: client 221.130.82.148#25316: query: www.njaqh.com IN A +
20-May-2009 14:06:30.256 queries: client 221.131.128.199#4847: query: 3g.mop.com IN A +E
20-May-2009 14:06:30.256 queries: client 218.205.15.121#60701: query: a07.insenz.com IN A +
20-May-2009 14:06:30.258 queries: client 221.131.128.129#33342: query: ora11.linux IN AAAA +
20-May-2009 14:06:30.258 queries: client 117.136.19.175#43590: query: cs3.duba.net IN A +
20-May-2009 14:06:30.259 queries: client 211.143.233.14#2050: query: tv.tracker.prq.to IN A +
20-May-2009 14:06:30.259 queries: client 218.206.110.84#6476: query: news.qq.com IN A +
20-May-2009 14:06:30.259 queries: client 117.136.19.37#47754: query: drift.qzone.qq.com IN A +
20-May-2009 14:06:30.259 queries: client 10.224.31.188#4297: query: wap2.3g.qq.com IN A +
20-May-2009 14:06:30.259 queries: clien

#!/bin/bash

awk -F"[# ]" '{a[$5]=a[$5]"z"}END{for( i in a )print i"\n", length(a[i])}' temp.log 1>aaa.txt

楼上的以为我的答案很高明,让我汗颜呀,我来个针对特例优化后的吧,原理与上面一样

awk -F"#| " '{a[$5]++}END{for(i in a)print i"\n"a[i]}' temp.log 1>aaa.txt

假设这个文件名:log.txt
命令如下:
cat log.txt| gawk -F'#| ' '{print $5}'|sort|uniq -c|gawk '{print $2,$1}'

楼上两个真经典, 受教受教. 我菜鸟冒昧解释解释两位的命令

cat log.txt| gawk -F'#| ' '{print $5}'|sort|uniq -c|gawk '{print $2,$1}'
-F'#| ' 利用#或者空格分隔, 第一次碰到学习了
sort 排序
uniq -c 合并重复, 统计个数

awk -F"[# ]" '{a[$5]=a[$5]"z"}END{for( i in a )print i"\n", length(a[i])}' temp.log
太nb了, 佩服佩服awk用的如此之娴熟
-F"[# ]" 同样用#或者空格分隔, 学习学习
a[$5]=a[$5] awk关联数组, 太经典了, a[$5]用字符串做数组a的下标, 而字符串本身就是IP地址, =a[$5]"z"太nb了, 看了半天才明白, 数字内部