Replace key:value from one file in another file in shellscript?

awk, bash, linux, sed, shell

Solution

awk '
    NR==FNR {url[$1]=$2; next} 
    {for (i=1; i<=NF; i++) if ($i in url) $i=url[$i]; print}
' keys.txt text.txt 
notrelated somewhatrelated http://thisis.example.com/moooooar.asp
http://thisis.example.com/moooooar.asp unimportant
asdf asdf asdf https://maps.google.com dadadada

Problem

I have a "database file" with key-value entries and I have another file where the keys appear among other content. Now I want to replace that keywords with the values of my key-value file. Example: There is one file "keys.txt" with "keyword space url": ``` name1 https://maps.google.com something http://www.domain.com/bla.php?value=500 blabla http://thisis.example.com/moooooar.asp ``` I have another file "text.txt" which has one or several words per line, like this: ``` notrelated somewhatrelated blabla blabla unimportant asdf asdf asdf name1 dadadada ``` And as a result I want to have something like this: ``` notrelated somewhatrelated http://thisis.example.com/moooooar.asp http://thisis.example.com/moooooar.asp unimportant asdf asdf asdf https://maps.google.com dadadada ``` Actually my question is very similar to https://stackoverflow.com/questions/5283653/ but non of the solutions mentioned there did work out since I am working with URLs (slashes, colons...) I guess?

Original source