Chinaunix首页 | 论坛 | 博客
  • 博客访问: 972862
  • 博文数量: 99
  • 博客积分: 3306
  • 博客等级: 中校
  • 技术积分: 1238
  • 用 户 组: 普通用户
  • 注册时间: 2009-04-21 10:14
文章分类

全部博文(99)

文章存档

2012年(37)

2011年(56)

2010年(6)

分类: LINUX

2012-03-24 17:55:30

人都有犯傻的时候。
我在整理DNS列表的时候需要总bind的一堆配置文件里直接把指定的IP地址对应的DNS记录(包括CNAME的)全部都获取出来。由于需要对IP地址、D域名进行精确的匹配,所以得使用"^,$"之类的限制符号来保证正确性。
由于匹配的时候使用的IP地址 域名是得作为变量输入,所以在使用awk的时候即便把变量传入了,但是不能直接在变量后使用^,$之类的字符去限定。所以我先使用的是下面这个脚本完成的任务。

点击(此处)折叠或打开

  1. #!/bin/bash
  2. IP=$1
  3. FILE=$2
  4. DNS=$(grep -E "\b$IP\b" $FILE |awk '{ a[$1]++} END{ for (i in a){gsub(/\.$/,"",i);print i}}')
  5. LIST="$DNS"
  6. for host in $DNS
  7. do
  8.    DCNAME=$( grep -E "\b$host.$" $FILE|awk '{a[$1]++} END{for (i in a){gsub(/\.$/,"",i);print i}}')
  9.    L=${#DCNAME}
  10.    if [ $L -gt 3 ];then
  11.         LIST="$LIST $DCNAME "
  12.    fi
  13. done
  14. echo $LIST
后来仔细想想其实下面的方式都可以很简单的达到目标


点击(此处)折叠或打开

  1. DNS=$(awk -v ip=$IP '{ if($3 == ip ){ a[$1]++ } } END{ for (i in a){gsub(/\.$/,"",i);print i}}' $FILE)
  2. DNS=$(awk -v ip=$IP '{ if($3 ~ "^"ip"$" ){ a[$1]++ } } END{ for (i in a){gsub(/\.$/,"",i);print i}}' $FILE)

  3.  DCNAME=$(awk -v H=$host '{ if ( $0 ~ "^"H".$") { a[$1]++}} END{for (i in a){gsub(/\.$/,"",i);print i}}' $FILE)



阅读(4856) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~