web-dev-qa-db-ja.com

bash psを使用して一緒にカット

「ps」からPID、UID、およびコマンドフィールドを抽出する必要があり、次のようにしてみました。

ps -L u n | cut -f 1,2,13

何らかの理由で、これはcutコマンドがまったくないので動作します。通常のps出力を返すだけです。次に、試しました

ps -L u n | tr -s " " | cut -d " " -f 1,2,13そして、これは全くナンセンスを返します。次に、私はそれをこれで遊んでみました:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14

そして、これはどういうわけか私が必要とするものを返します(ほとんど、そしてそれがほとんど機能する理由がわかりません)。ただし、コマンドフィールドを途中で切り取ります。どうすれば必要なものを入手できますか?

28
darxsys

psはスペース区切りを出力していますが、cutなしで-dはタブ文字を使用します。 tr -sはスペースを一緒に圧縮して、必要な間隔を広げますが、最初のスペースのセット(1に圧縮)があるため、各フィールドに1を追加する必要があるので注意してください。また、各Wordのコマンドにはスペースがあります。これはうまくいくはずです:

ps -L u n | tr -s " " | cut -d " " -f 2,3,14-
45
Explosion Pills

カットを使用する特別な理由はありますか?

これはあなたが望むことをすると思います:

ps -eopid,uid,cmd
14
Sylvain Kalache

次のように、awkを使用してコマンドをクリーンアップできます。

ps -L u n | awk '{ print $1,$2,$13 }'
13
Nathan Adam