У меня есть два файла, 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 или с помощью небольшого сценария.