有没有一种简单的方法打印IP_Address:port#?因为一旦进入SED命令,端口:#就会被剥离
输入文件示例
Apr 6 14:20:41 TCP 178.255.83.1:80 in如下所示的首选输出
Apr 6 14:20:41 TCP 178.255.83.1:80 in United Kingdomegrep -w 'TCP|UDP' $Denied_IPs |
sed 's/:[^:]* in/ in/; s/:[^:]* out/ out/' |
awk '{cmd="echo "$5" | code | fgrep 'Country:' | cut -c 16-43";
cmd | getline rslt;
close(cmd);
print $1" "$2" "$3" "$4" "$5" "$6" "rslt}' >> "$IP2COUNTRY"发布于 2012-04-07 02:55:50
sed命令正在显式剥离端口。鉴于这就是sed命令所做的全部工作,只需将其从表达式中删除。
顺便说一句,这是一个相当不理想的实现。特别是在我们移除sed之后,可以将egrep折叠到awk中
awk '/ (TCP|UDP) / {
split($5, addr, /:/);
cmd = "echo " addr[1] " | code | fgrep Country: | cut -c 16-43";
cmd | getline rslt;
close(cmd);
print $1, $2, $3, $4, $5, $6, rslt
}' < "$Denied_IPs" >> "$IP2COUNTRY"我不禁想到,awk中的code调用可以进行一些优化。
(我还删除了'Country:'两边的单引号,如果需要它们,它们对- and没有任何作用,它们实际上会破坏脚本,因为整个过程已经用单引号括起来了。)
https://stackoverflow.com/questions/10047811
复制相似问题