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

Есть идеи?

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] 
  • Проблема с трубами. Труба прекращается, когда читатель делает
  • Проблема с получением интерактивного ввода во время цикла чтения
  • Как я могу разбить канал на 16 байтовых последовательностей?
  • измеритель скорости трубы с машиносчитываемым выходом
  • Как захватить stdout запущенного процесса, перенаправленного на / dev / null
  • Что делает «-t» в команде mv? Пример ниже
  • Создайте временный файл из перенаправления или вывода stdout
  • Командная строка SQLite: как вы подключаете вывод к утилите UNIX?
  • Прямой выход в трубу и стандартный вывод
  • проверить md5sum из трубы
  • Как подключить вывод ffmpeg?
  • Использовать клавиатурно-интерактивную аутентификацию при подключении ssh к другой команде
  • Linux и Unix - лучшая ОС в мире.