you can tell if awk is parsing the first file given on the command line using FILENAME, thusly:
BEGIN { rulesfile="" } rulesfile == "" { rulesfile = FILENAME; } FILENAME == rulesfile { build_rule($0); } FILENAME != rulesfile { apply_rule($0); }
Example:
Suppose you have a text-line "database" and you want to make some batch changes to it, by replacing some old lines with new lines.
BEGIN { rulesfile="" } rulesfile == "" { rulesfile = FILENAME; } rulesfile == FILENAME { replace[$1] = $0; } rulesfile != FILENAME \ { if ($1 in replace) print replace[$1]; else print; }
Another way, using ARGV:
(FILENAME == ARGV[1]) { replace[$1] = $0; next } ($1 in replace) { print replace[$1]; next } { print }