여러 파이프를 사용하는 명령이 있다고 가정해 보겠습니다. 이는 어떤 명령이든 가능하지만 예를 들어 이 간단한 잘라내기 및 정렬을 사용해 보겠습니다. 예를 들어
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]