无法正确删除重复项

时间:2014-09-14 15:14:48

标签: bash ubuntu awk sed hosts

我是shell脚本的新手,我正在尝试编写一个小脚本来下载和解析主机文件。

cd /tmp

rm hosts*

#Download files
aria2c -j 10 http://winhelp2002.mvps.org/hosts.txt -o hostsA
aria2c -j 10 "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext" -o hostsB

#Parse files
sed 's/0.0.0.0/127.0.0.1/' hostsA>  hostsM
sed -n '/^127.0.0.1/p' hostsB  >> hostsM  

#Remove duplicates
awk '!x[$0]++' hostsM > hosts

#mv /etc/hosts /etc/hosts.backup
#mv hosts.txt /etc/hosts

echo "Complete."

例如,以下条目发生两次:

127.0.0.1 newopenx.detik.com

Here完整的主机很好。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

将你的awk改为:

awk '{sub(/\r/, "")} !x[$0]++' hostsM > hosts

由于原始主机文件中的某些行在\r之前有\n(例如DOS EOL)。

答案 1 :(得分:0)

如果您不介意排序,-u的{​​{1}}选项会删除重复项。助记符:独特。

sort

您之前的行正在复制以127.0.0.1开头的每一行。如果您只想保留它们并丢弃其他的,请使用-n选项:

sort -u hostsM >hosts