Похоже, у вас есть несколько разных форматов для записей в одном файле, и у вас нет ожидаемых результатов, так что это лучшее предположение относительно того, что вы хотите, используя join
и sort
:
$ join -11 -23 -t'|' -o 2.1,2.2,2.3,2.4,2.5,2.6 <(sort search.txt) <(sort -t'|' -k3,3 product*.txt)
45|2|A0024|C234|001|004
45|2|A0024|C234|001|004
45|2|B0003|C896|001|004
45|2|B0003|C896|001|004
45|2|B1545|C237|001|004
45|2|B1545|C237|001|004
В другом возможном подходе используется grep
:
$ grep -Fhf <(sed 's/.*/|&|/' search.txt) product*.txt
45|2|B0003|C896|001|004
45|2|A0024|C234|001|004
45|2|B1545|C237|001|004
45|2|B0003|C896|001|004
45|2|A0024|C234|001|004
45|2|B1545|C237|001|004
Для обоих этих типов требуется оболочка типа bash
или zsh
, которая понимает синтаксис перенаправления <(command)
.
Если вы делаете много вещей с этими файлами, подумайте об их импорте в базу данных (sqlite3 проще всего). Запросы с соответствующими индексами будут выполняться намного быстрее, чем сканирование текстовых файлов.