複数のプロセスを持つすべてのユーザーを見つけてシェルに表示します。

複数のプロセスを持つすべてのユーザーを見つけてシェルに表示します。

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

関連情報