人都有犯傻的时候。
我在整理DNS列表的时候需要总bind的一堆配置文件里直接把指定的IP地址对应的DNS记录(包括CNAME的)全部都获取出来。由于需要对IP地址、D域名进行精确的匹配,所以得使用"^,$"之类的限制符号来保证正确性。
由于匹配的时候使用的IP地址 域名是得作为变量输入,所以在使用awk的时候即便把变量传入了,但是不能直接在变量后使用^,$之类的字符去限定。所以我先使用的是下面这个脚本完成的任务。
- #!/bin/bash
- IP=$1
- FILE=$2
- DNS=$(grep -E "\b$IP\b" $FILE |awk '{ a[$1]++} END{ for (i in a){gsub(/\.$/,"",i);print i}}')
- LIST="$DNS"
- for host in $DNS
- do
- DCNAME=$( grep -E "\b$host.$" $FILE|awk '{a[$1]++} END{for (i in a){gsub(/\.$/,"",i);print i}}')
- L=${#DCNAME}
- if [ $L -gt 3 ];then
- LIST="$LIST $DCNAME "
- fi
- done
- echo $LIST
后来仔细想想其实下面的方式都可以很简单的达到目标
- DNS=$(awk -v ip=$IP '{ if($3 == ip ){ a[$1]++ } } END{ for (i in a){gsub(/\.$/,"",i);print i}}' $FILE)
- DNS=$(awk -v ip=$IP '{ if($3 ~ "^"ip"$" ){ a[$1]++ } } END{ for (i in a){gsub(/\.$/,"",i);print i}}' $FILE)
- DCNAME=$(awk -v H=$host '{ if ( $0 ~ "^"H".$") { a[$1]++}} END{for (i in a){gsub(/\.$/,"",i);print i}}' $FILE)
阅读(4856) | 评论(0) | 转发(0) |