awk应用
例:给出一个文件,domain.txt,内容如下:
sina.com
baidu.com
sohu.com
google.com
另外有一个文件,sites.txt
www.sina.com
news.sohu.com
dl1.baidu.com
map.google.cn
www.baidu.com
sports.sina.com
finances.sohu.com
如何用awk统计出每个域在sites.txt中出现的次数
http://bbs. chinaunix.net/ thread-1706400-2-1.html
--------------------------
awk -F. '{a[$2"."$3]++}END{for(i in a)print i ,a[i]}' sites.txt
这个是统计sites.txt中各个域出现的次数
awk 'NR==FNR{a[$0]=0;next}{for(i in a)if($0~i)a[i]++}END{for(i in a)print i,a[i]}' domain.txt sites.txt
if($0~i) 这段正则如何改的匹配更精准
比如 sites.txt 有一条 xx.abcbaidu.com
这样就会错,要改成$0~.i$
语法应该怎么写!
awk 'NR==FNR{a[$0]}NR>FNR{for(i in a){if($0~i)a[i]++}}END{for(i in a){print i,a[i]}}' domain.txt sites.txt
while read line;do echo "$line:"$(grep -c $line sites.txt);done <domain.txt
- awk -F'.' 'NR==FNR{a[$(NF-1) "." $NF]++}NR!=FNR&&($0 in a){print $0 "\t" a[$0]}' sites.txt domain.txt
- 分析发现,只需要提取域名的最后两个域,如果domain.txt 中的域名不是2个字段,这段代码不适用
awk -F. 'NR==FNR{a[$0]=0;next}{t=$(NF-1)"."$NF;if(t in a)a[t]++}END{for(i in a)print i,a[i]}' domain.txt sites.txt
#!/bin/sh
for i in `cat domain.txt`
do
NO=`grep $i sites.txt|wc -l`
echo $i : $NO >> file
done