How to use awk variables in regular expressions?
awk, regex
Solution
`awk` can match against a variable if you don't use the `//` regex markers.
`if ( $0 ~ regex ){ print $0; }`
In this case, build up the required regex as a string
regex = dom"$"
Then match against the `regex` variable
if ( $1 ~ regex ) {
domain[dom]+=$2;
}
Problem
I have a file called domain which contains some domains. For example: ``` google.com facebook.com ... yahoo.com ``` And I have another file called site which contains some sites URLs and numbers. For example: ``` image.google.com 10 map.google.com 8 ... photo.facebook.com 22 game.facebook.com 15 .. ``` Now I'm going to count the url number each domain has. For example: google.com has 10+8. So I wrote an awk script like this: ``` 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; } } } } ``` But the code `if($1 ~/$dom$)` doesn't run like I want. Because the variable $dom in the regular expression was explained literally. So, the first question is: Is there any way to use variable `$dom` in a regular expression? Then, as I'm new to writing script Is there any better way to solve the problem I have?