複数のパイプを使用するコマンドがあるとします。これはどんなコマンドでも可能ですが、たとえば、この単純な切り取りと並べ替えを試してみましょう。例えば
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)
どんなアイデアがありますか?
答え1
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]