LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1753|回复: 7

请教awk匹配IP地址

[复制链接]
发表于 2009-3-17 00:04:49 | 显示全部楼层 |阅读模式
请教awk匹配IP地址,其中ip地址为shell传递的变量
我匹配的时候老报错 不知道怎么去解决
我的脚本如下
#!/bin/bash
FILEPOOL=(QZIP.csv)
for i in ${FILEPOOL[@]}
do
sed -i 's/  */ /g' $i
IP=`awk   '{print $1}' $i`
for m in "${IP[@]}"
do
zone=`./ip_search.pl $m|cut -b1-4`
num=`awk  '{if ($1~/'${m}'/) print $2}' $i`
echo -en "$num\t\t\t $zone\n"
#echo -en "$m $num $zone\n" >>./zh/$i
done
done
QZIP.csv的内容如下
61.130.78.178 1
61.130.78.178 1
61.130.78.178 1
61.130.78.178 1
61.130.78.178 1

报错如下
awk: {if ($1~/58.213.165.204
awk:          ^ unterminated regexp
awk: cmd. line:1: {if ($1~/58.213.165.204
awk: cmd. line:1:                        ^ unexpected newline or end of string
发表于 2009-3-17 19:48:23 | 显示全部楼层
Post by asusarhai;1962027

#!/bin/bash
FILEPOOL=(QZIP.csv)
for i in ${FILEPOOL[@]}
do
...


楼主的Shell是Bash?你的Bash是什么版的?真强啊。
还有,你就说要匹配IP,具体干什么不知道啊,比如想要等到什么样的效果(结果等)。
还有你脚本里还用其它的perl程序了,应该说一下那个程序是干什么的吧。

给个我的建议:别用Shell里的数组,如果只是想匹配IP地址,直接用awk按行来处理,我觉得就够了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-17 20:33:43 | 显示全部楼层
我有一个文本文件 格式如下
192.168.1.1  12
第一段是IP 第二段是这个IP登陆的次数
我要用iP_search 找出这个IP的地址位置 如‘江苏’ 附加 为这个文本文件的第三列

变成 192.168.1.11 12 江苏
回复 支持 反对

使用道具 举报

发表于 2009-3-17 20:48:02 | 显示全部楼层
awk '{printf $0;printf " "; system("./ip_search.pl " $1);}' qzip.csv

你试试吧。如果你的ip_search.pl程序没输出回车符,就在后边再来个  printf "\n";  吧.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-18 16:35:35 | 显示全部楼层
可以了 谢谢啊
system("./ip_search.pl " $1);}

这个我还没用过 原来还可以调用系统命令啊
回复 支持 反对

使用道具 举报

发表于 2009-3-18 18:08:20 | 显示全部楼层
强,sh、Awk、Perl全部用上了...何苦...
回复 支持 反对

使用道具 举报

发表于 2009-3-19 01:35:31 | 显示全部楼层
perl -n -e 'if(/(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\b/){if ( $1 <= 255 && $2 <= 255 && $3 <= 255 && $4 <= 255 ) { print }}' ur_filename

#包括太于255
perl -n -e 'if(/\d{1,3}(\.\d{1,3}){3}\b/){ print }' ur_filename
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-3-19 09:54:22 | 显示全部楼层
用了纯真的IP库去找IP信息的了
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表