Chinaunix

标题: 关于ip日志统计的问题~~~~ [打印本页]

作者: jy01768678    时间: 2013-01-08 23:16
标题: 关于ip日志统计的问题~~~~
比如ip.txt 如下 第一列为ip地址 第二列为访问次数

  1. 1.2.3.4 30
  2. 1.2.5.100 100
  3. 1.2.6.220 44
  4. 1.2.7.119 60
  5. 1.2.10.29 210
  6. 1.2.11.110 150
  7. ........
复制代码
city.txt 如下 第一列也是ip段,第二列为城市

  1. 1.2.6.* 北京
  2. 1.2.7.* 天津
  3. 1.2.10.* 山东
  4. 1.2.3.* 山西
  5. 1.2.5.* 河南
  6. 1.2.11.* 上海
  7. ......
复制代码
怎么才能用 让这两个文件的数据合并成这样的形式 例如:
1.2.3.4     30 山西
1.2.5.100 100 河南
1.2.6.220 44 北京
......等等

{:3_198:}
作者: rongpmcu    时间: 2013-01-09 00:06
本帖最后由 rongpmcu 于 2013-01-09 09:48 编辑

awk -F "[. ]" 'NR==FNR{a[$1"."$2"."$3]=$0}NR>FNR{for(i in a){if(index($0,i)){print a,$5}}}' ip.txt city.txt
或者:
awk -F "[. ]" 'NR==FNR{a[$1"."$2"."$3]=$0}NR>FNR{for(i in a){if(index($0,i)){print a,$5; next}}}' ip.txt city.txt

1.2.6.220 44 北京
1.2.7.119 60 天津
1.2.10.29 210 山东
1.2.3.4 30 山西
1.2.5.100 100 河南
1.2.11.110 150 上海


不要用这个,呵呵  有bug  本身这个命令有bug(不支持相同前缀的ip),还有就是cu有bug  数组显示不出来  a  我是要取a的第i的元素,
但是。。。。   cu的bug也遇到好多次了


这样就可以了,参考楼下的啦 呵呵
  1. # awk -F "[. ]" 'NR==FNR{a[$1"."$2"."$3"."]=$5}NR>FNR{for(i in a){if(index($0,i)){print $0,a[i]; next}}print $0}' city.txt ip.txt   
复制代码

作者: yestreenstars    时间: 2013-01-09 00:12
  1. awk 'NR==FNR{sub(/\*/,"");a[$1]=$2;next}{b=gensub(/(.*\.).*/,"\\1",1);print $0,a[b]}' city.txt ip.txt
复制代码

作者: jy01768678    时间: 2013-01-09 10:34
回复 3# yestreenstars


    {:3_189:} 感谢星辰~不知道gensub能不能别的函数呀 我机器上暂时没这个函数~
作者: Shell_HAT    时间: 2013-01-09 10:37
回复 4# jy01768678


    试试gawk。你用的是什么系统?
作者: blackold    时间: 2013-01-09 10:50
回复 4# jy01768678


    用sub吧。
作者: yestreenstars    时间: 2013-01-09 11:10
回复 4# jy01768678
  1. awk 'NR==FNR{sub(/\*/,"");a[$1]=$2;next}{b=$0;sub(/[^\.]* .*/,"");print b,a[$0]}' city.txt ip.txt
复制代码

作者: seesea2517    时间: 2013-01-09 14:11
本以为 join 专做这事的,没想到弄成这么复杂,而且还把顺序弄乱了,真是不好意思啊:
  1. [seesea@UC ~]$ join -o2.2 2.3 1.3 <(sed -r 's/(.*)\.[^.]+$/\1 &/g' city.txt | sort ) <(sed -r 's/(.*)\.[^.]+$/\1 &/g' ip.txt | sort)
  2. 1.2.10.29 210 山东
  3. 1.2.11.110 150 上海
  4. 1.2.3.4 30 山西
  5. 1.2.5.100 100 河南
  6. 1.2.6.220 44 北京
  7. 1.2.7.119 60 天津
复制代码

作者: ljwd1000    时间: 2013-01-09 16:48
  1. awk -F'[. ]' 'NR==FNR{a[$1"."$2"."$3]=$NF}NR>FNR{for(i in a)if($0~i)print $0,a[i]}' city.txt ip.txt
复制代码

作者: jy01768678    时间: 2013-01-09 18:42
回复 5# Shell_HAT

ubuntu 11.10{:3_193:}
作者: jy01768678    时间: 2013-01-09 18:55
回复 2# rongpmcu

长姿势了 感谢~{:3_182:}




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2