ksh를 사용하여 스크립트를 작성하고 있습니다. N개 이상의 프로세스를 가진 모든 사용자를 찾아서 셸에 표시해야 합니다. N은 ksh에서 읽혀집니다.
을 사용해야 한다는 것을 알고 있지만 ps -elf
이를 어떻게 구문 분석하고, N개 이상의 프로세스를 가진 사용자를 찾고, 이를 사용하여 배열을 생성합니까? ksh의 배열에 몇 가지 문제가 있습니다. 배열을 만들지 않고도 간단한 솔루션이 도움이 될 수 있습니다. 누군가가 나에게 사용하라고 추천했습니다.
ps -elf | awk '{a[$3]++;}END{for(i in a)if (a[i]>N)print i, a[i];}' N=3
하지만 제대로 작동하지 않습니다.
답변1
출력 열을 ps
최소한으로 줄여야 합니다. 즉, 여기서는 사용자 이름만 요청됩니다. 이렇게 하면 추가 처리가 단순화됩니다.
예를 들어:
$ ps -eo user=
현재 실행 중인 모든 프로세스의 소유자를 인쇄합니다( =
헤더 제외).
각 사용자 수를 얻는 간단한 방법:
$ ps -eo user= | sort | uniq -c
1 dovecot
1 messagebus
1 mpd
1 polkitd
2 postfix
121 root
27 me
그런 다음 필요에 따라 필터링할 수 있습니다.
$ ps -eo user= | sort | uniq -c | awk '$1 > 42 {print $2}'
root
변수에는 제한사항이 있습니다.
$ N=42
$ ps -eo user= | sort | uniq -c | awk -v limit="$N" '$1 > limit {print $2}'
root