psコマンドの結果からプロセスIDを取得するときはcutではなくawkを使う
cutとawkの違いを読み間違えた件について、懺悔というか反省文。
目的:
以下の出力結果からpsコマンドのプロセスID(1234)を取得したい。
$ ps -ef | head -n 3 UID PID PPID C STIME TTY TIME CMD myokoym 1234 0 0 12:34 pts/0 00:00:00 ps -ef myokoym 999999 0 0 12:34 pts/0 00:00:00 head
手順:
該当行をgrepコマンドで抽出し、スペース区切りで2番目のフィールド(カラム)を取得する。
cutの場合
最初はcutを使ってみます。
$ ps -ef | head -n 3 | grep "ps -ef" | cut -d" " -f2
何も出力されません。試しにheadのプロセスIDを取得すると、
$ ps -ef | head -n 3 | grep "head" | cut -d" " -f2 999999
こちらは取れました。どうも、cutだとスペースが連続する場合に上手く取れない様子。スペースの数だけフィールド数が増えてしまっています。
$ ps -ef | head -n 3 | grep "ps -ef" | cut -d" " -f4 1234
ちなみに、cutのデフォルトの区切り文字は「タブ」です。