Again: you have no idea how much time you would save by stopping for ~10
hours and actually learning the commands you use (e.g., as I have already
told you, the "system" function must be used in AWK to call system
commands... but you do not need that here), regular expressions (unless
escaped, a dot means "any character"; 'grep -F' must be used to interpret the
patterns as fixed strings), simpler commands (your first AWK program just
does 'cut -f 2'; 'grep' is rarely needed with structured files), etc. Here,
the simplest solution is to use 'join', which was also the solution in the
previous thread you created on this forum... However, your input looks
wrong: on line 674 of HNs.bst_.lt_.txt, the second column only contains the
character 0... and your 'grep' selects (among others) all the lines that
include this character. I assume you want whole domain matches.
The solution with 'join':
$ cut -f 2 HNs.bst_.lt_.txt | sort > temp
$ sort -k 2 HNs.www_.* | join -1 2 - temp
If you want the output formatted like the inputs, append "| awk '{ print $2
"\t" $1 }'" to the last command.
If HNs.bst_.lt_.txt may be much larger and if you care about improved
execution time, you can have all four commands run in parallel using a named
pipe, created with 'mkfifo', instead of a temporary file. Doing that in a
Shell script taking as input first the file with the domain names to search
and then all other files:
#!/bin/sh
if [ -z "$2" ]
then
printf "Usage: $0 searched-domain-file file1 [file2 ...]
"
exit
fi
searched="$1"
shift
TMP=$(mktemp)
trap "rm $TMP 2>/dev/null" 0
mkfifo $TMP
cut -f 2 "$searched" | sort > $TMP &
sort -k 2 "$@" | join -1 2 - $TMP