Как сказать «узкое место» в команде 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) 

Есть идеи?

  • Как закрыть трубу FIFO?
  • Как загрузить пакет RPM и установить его в одной строке?
  • В чем разница между who> lp и who | LP?
  • Как фиксировать статус выхода команды без конечного результата в конвейере?
  • Полнофункциональная функциональность uniq
  • Как захватить stdout запущенного процесса, перенаправленного на / dev / null
  • перенаправление вывода команды, как если бы это был входной файл
  • Как «bash» или «gnome-terminal» печатает информацию о пользователе и пути?
  • 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 - лучшая ОС в мире.