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]"
"$0:$0;print s[$2];s[$2]=""}' hosts.txt
原文地址:https://www.cnblogs.com/haojile/p/12489627.html