You can use `-v rulesfile=filename' to process a file differently, like you would any other variable, and then use a `getline' loop (and `close') in your BEGIN statement.
BEGIN \
{
if (rulesfile=="")
{
print "must use -v rulesfile=filename";
exit(1);
}
while ( (getline < rulesfile) >0 )
replace[$1]=$0;
close(rulesfile);
}
{
if ($1 in replace)
print replace[$1];
else
print;
}