我有一个名为domain的文件,其中包含一些域.例如:
google.com facebook.com ... yahoo.com
我还有另一个名为site的文件,其中包含一些网站的URL和数字.例如:
image.google.com 10 map.google.com 8 ... photo.facebook.com 22 game.facebook.com 15 ..
现在我要计算每个域的url号码.例如:google.com有10 8.所以我写了一个这样的awk脚本:
BEGIN{
while(getline dom < "./domain" > 0) {
domain[dom]=0;
}
for(dom in domain) {
while(getline < "./site" > 0) {
if($1 ~/$dom$) #if $1 end with $dom {
domain[dom]+=$2;
}
}
}
}
但代码if($1〜/ $dom $)不像我想要的那样运行.因为正则表达式中的变量$dom是从字面上解释的.所以,第一个问题是:
有没有办法在正则表达式中使用变量$dom?
然后,因为我是新的写脚本
有没有更好的方法来解决我的问题?
首先,变量是dom不是$dom – 将$作为一个运算符来提取存储在变量dom中的列号的值
其次,awk将不会插入//之间的内容 – 那只是一个字符串.
你想要match()函数,其中第二个参数可以是一个被视为正则表达式的字符串:
if (match($1,dom "$")) {...}
我会编写一个解决方案,如:
awk '
FNR == NR {domain[$1] = 0; next}
{
for (dom in domain) {
if (match($1,dom "$")) {
domain[dom] += $2
break
}
}
}
END {for (dom in domain) {print dom,domain[dom]}}
' domain site