Как сказать «узкое место» в команде muti-pipe

Скажем, у меня есть команда, использующая несколько труб. Это может быть любая команда, но, например, позволяет использовать этот простой разрез и сортировку. например

cat data.tsv | cut -f1,5,8,12 | sort | uniq -c | sed -e "s/cat/dog/g" | sort -k1nr > output.tsv 

Как я могу «профилировать» это?

В любом случае, я могу сказать, что его sed или uniq замедляют мое время выполнения?

В моем идеальном мире я бы хотел увидеть что-то вроде:

 1- cat: 15 lines per second 2- cut: 13 lines per second 3- sort: 6 lines per second 4- uniq: 6 lines per second (Limited by input) 5- sed: 6 lines per second (Limited by input) 6- sort 6 lines per second (Limited by input) 7- write 6 lines per second (Limited by input) 

Есть идеи?

  • Ввод трубы в другой процесс по одной линии за раз
  • Как обрабатывать / выводить TCPDUMP-файлы в реальном времени
  • называются pipe (mkfifo) предшественником RabbitMQ?
  • вывести выход parec в sox
  • Как перенаправить stdout и stdin в telnet?
  • Подсчет файлов в папке без wc
  • Почему я не могу аутентифицировать запрос на завивание, когда трубопровод меньше или больше?
  • Что такое переносимый (POSIX) способ достижения замещения процесса?
  • One Solution collect form web for “Как сказать «узкое место» в команде muti-pipe”

    Я предлагаю использовать pv для подсчета строк через трубу. С помощью pv вы можете шаг за шагом найти узкое место.

     cat data.tsv | pv -lr > /dev/null cat data.tsv | cut -f1,5,8,12 | pv -lr > /dev/null cat data.tsv | cut -f1,5,8,12 | sort | pv -lr > /dev/null cat data.tsv | cut -f1,5,8,12 | sort | uniq -c | pv -lr > /dev/null ... 

    Пример с выходом pv:

     timeout 10 yes | sed 's/yes/foo/' | rev | pv -lr >/dev/null [ 120k/s] 
    Linux и Unix - лучшая ОС в мире.