kshを使ってスクリプトを書いています。複数のプロセスを持つすべてのユーザーを見つけてシェルに表示する必要があります。 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