加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式 – 如何在正则表达式中使用awk变量?

发布时间:2020-12-14 06:28:33 所属栏目:百科 来源:网络整理
导读:我有一个名为domain的文件,其中包含一些域.例如: google.comfacebook.com...yahoo.com 我还有另一个名为site的文件,其中包含一些网站的URL和数字.例如: image.google.com 10map.google.com 8...photo.facebook.com 22game.facebook.com 15.. 现在我要计算
我有一个名为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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读