Если вы используете систему Unixy или Cygwin, взгляните на команду соединения - она может сделать именно то, что вы просите.
[26] % join --help
Usage: join [OPTION]... FILE1 FILE2
For each pair of input lines with identical join fields, write a line to
standard output. The default join field is the first, delimited
by whitespace. When FILE1 or FILE2 (not both) is -, read standard input.
-a FILENUM print unpairable lines coming from file FILENUM, where
FILENUM is 1 or 2, corresponding to FILE1 or FILE2
-e EMPTY replace missing input fields with EMPTY
-i, --ignore-case ignore differences in case when comparing fields
-j FIELD equivalent to `-1 FIELD -2 FIELD'
-o FORMAT obey FORMAT while constructing output line
-t CHAR use CHAR as input and output field separator
-v FILENUM like -a FILENUM, but suppress joined output lines
-1 FIELD join on this FIELD of file 1
-2 FIELD join on this FIELD of file 2
--help display this help and exit
--version output version information and exit
Unless -t CHAR is given, leading blanks separate fields and are ignored,
else fields are separated by CHAR. Any FIELD is a field number counted
from 1. FORMAT is one or more comma or blank separated specifications,
each being `FILENUM.FIELD' or `0'. Default FORMAT outputs the join field,
the remaining fields from FILE1, the remaining fields from FILE2, all
separated by CHAR.
Important: FILE1 and FILE2 must be sorted on the join fields.
Report bugs to <bug-coreutils@gnu.org>.
Если вы хотите что-то более сложное или вам абсолютно необходимосделайте это на python, а затем подумайте о том, чтобы прочитать файлы в базу данных SQLite в памяти - тогда у вас есть все возможности SQL для объединения и манипулирования данными.
edit просто прочитайте, что файлыслишком велики, чтобы уместиться в памяти.Вы все еще можете использовать SQLite, но создать временную базу данных на диске.