У меня есть два файла, file1.txt и file2.txt. file1.txt имеет около 14K строк, а file2.txt - около 2 миллиардов. file1.txt имеет одно поле f1 на строку, а file2.txt имеет 3 поля, от f1 до f3, разделенных | ,
Я хочу найти все строки из file2.txt где f1 из file1.txt соответствует f2 из file2.txt (или в любом месте строки, если мы не хотим тратить дополнительное время на разбиение значений file2.txt).
file1.txt (около 14K строк, не отсортировано):
foo1
foo2
...
bar1
bar2
...
file2.txt (около 2 миллиардов строк, не отсортировано):
date1|foo1|number1
date2|foo2|number2
...
date1|bar1|number1
date2|bar2|number2
...
Ожидаемый выход:
date1|foo1|number1
date2|foo2|number2
...
date1|bar1|number1
date2|bar2|number2
...
Вот то, что я пробовал, и, кажется, на это уходит несколько часов:
fgrep -F -f file1.txt file2.txt > file.matched
Интересно, есть ли лучший и более быстрый способ выполнить эту операцию с помощью обычных команд Unix или с помощью небольшого сценария.