AWK处理重复Hosts
最近在做不同环境相关的项目,因为一直在调试中,总会遇到不同环境多方导致的hosts重复或者指向的ip不一致等问题,比如如下的hosts,绑定host重复到还好,不会影响到域名执行,但是就像下面的onlinepub.nsg.com一样,有重复而且域名的指向还不一样,一定会出错,所以需要对这种hosts做以下处理。
127.0.7.3 onlinepub.nsg.com ←这个域名还有重复
127.0.7.3 onlineplay.nsg.com
127.0.7.31 onlineplay.nsg.com
127.0.7.25 slb.nanshuge.com ←这里结尾有空格
127.0.8.12 rep-sec.nsglatest.com ←这里中间有多个有空格
127.0.8.12 rep-sec.nsgcdn.com
127.0.7.3 onlinepub.nsg.com
需要用到以下脚本进行处理:
#根据多列去重
awk -F ' ' '!x[$1 ,$2]++' hosts.txt # 注意,这里的分隔符为空格(F后面的' '),使用FS的默认值时,awk用空格或制表符来分隔字段,并且删除各字段前多余的空格或制表符
cat hosts.txt |awk '!a[$1" "$2]++{print}'
#只显示重复的行
cat hosts.txt |awk 'a[$1 ,$2]++{print}' #尽量使用这个,避免空格导致计算不准确
cat hosts.txt |awk 'a[$0]++{print}'
#第二列相同,第一列不同
awk '!a[$2]++{s[$2]=$0;b[$1$2]++;next} a[$2]++&&!b[$1$2]++{s[$2]=s[$2]!=""?s[$2]"\n"$0:$0;print s[$2];s[$2]=""}' hosts.txt