У меня есть огромный источник данных, который я фильтрую, используя некоторые grep
s.
Вот в основном то, что я делаю сейчас:
#!/bin/bash
param1='something'
param2='another'
param3='yep'
echo $(avro-read /log/huge_data | grep $param1 | grep "$param2-" | grep $param3 | wc -l) / $(avro-read /log/ap/huge_data | grep $param1 | grep -v "$param2-" | grep $param3 | wc -l) | bc -l
Обратите внимание, что я делаю в основном одну и ту же фильтрацию дважды (одна разница во второй раз), беру отсчет каждого и делю конечный результат. Это определенно хакерская вещь, но я бы хотел немного ускорить ее и выполнить первоначальную фильтрацию только один раз без использования временного файла.
Я пытался использовать fifo, но я не уверен, возможно ли иметь два процесса в одном скрипте, читающих из него, а также иметь третий процесс, "ожидающий", пока оба не будут выполнены для вычисления окончательного результата. Я также изучил использование tee
, но опять же не уверен, как синхронизировать полученные подпроцессы.
РЕДАКТИРОВАТЬ: Решил это сам, используя https://superuser.com/a/561248/43649, но пометил другое предложение в качестве ответа.