Mam ogromne źródło danych, które filtruję za pomocą niektórych grep
s.
Oto co robię teraz:
#!/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
Zwróć uwagę na to, że robię najczęściej to samo filtrowanie dwa razy (jedna różnica za drugim razem), biorąc pod uwagę liczbę i dzieląc wynik końcowy. Jest to zdecydowanie hacky do zrobienia, ale chciałbym spróbować trochę przyspieszyć i wykonać początkowe filtrowanie tylko raz bez użycia pliku tymczasowego.
Próbowałem użyć fifo, ale nie jestem pewien, czy możliwe jest posiadanie dwóch procesów w jednym odczycie skryptu z niego, a także trzeci proces „czekanie”, aż oba zostaną wykonane, aby obliczyć wynik końcowy. Zajrzałem też do użycia tee
, ale znowu nie wiem, jak zsynchronizować powstałe podprocesy.
EDYCJA: Sam rozwiązałem ten problem https://superuser.com/a/561248/43649 , ale oznaczył kolejną sugestię jako odpowiedź.