I need to do something similar to this post (but with a twist). That is why I am asking.
unix shell: replace by dictionary
I have a dictionary(dict.txt). I
Usage: awk -f foo.awk dict.dat user.dat
http://www.gnu.org/software/gawk/manual/html_node/String-Functions.html
http://www.gnu.org/software/gawk/manual/html_node/Arrays.html
NR == FNR {
rep[$1] = $2
next
}
{
for (key in rep)
gsub(key, rep[key])
print
}
As long as your dictionary keys contain nothing but alphanumeric characters, this Perl will do what you need.
use strict;
use warnings;
open my $fh, '<', 'dict.txt' or die $!;
my %dict = map { chomp; split ' ', $_, 2 } <$fh>;
my $re = join '|', keys %dict;
open $fh, '<', 'user.txt' or die $!;
while (<$fh>) {
s/($re)/$dict{$1}/g;
print;
}
This might work for you (GNU sed):
sed '/./!d;s/\([^ ]*\) *\(.*\)/\\|\1|s||\2|g/' dict.txt | sed -f - user.txt