1. ホーム
  2. linux

[解決済み] Bashでコマンドの出力を列で分割する?

2023-02-10 18:24:26

質問

こんなことがしたいのですが。

  1. コマンドを実行する
  2. 出力をキャプチャする
  3. 行を選択する
  4. その行の列を選択する

例として、コマンド名を $PID からコマンド名を取得したいとします (これは単なる例であることに注意してください。これがプロセス ID からコマンド名を取得する最も簡単な方法であると示唆しているわけではありません。私の本当の問題は、私が制御できない出力形式の別のコマンドにあります)。

もし私が ps を得ます。


  PID TTY          TIME CMD
11383 pts/1    00:00:00 bash
11771 pts/1    00:00:00 ps

次に、私は ps | egrep 11383 を実行すると

11383 pts/1    00:00:00 bash

次のステップ ps | egrep 11383 | cut -d" " -f 4 . 出力は

<absolutely nothing/>

問題なのは cut は出力を半角スペースで切ってしまうので ps は2列目と3列目の間にスペースを追加し、表の体裁を保つようにします。 cut は空の文字列を選びます。もちろん、私は cut を使って4番目のフィールドではなく7番目のフィールドを選択することもできますが、特に出力が可変で、事前にわからない場合、どのように知ることができるでしょうか。

どのように解決するのですか?

簡単な方法としては tr で、繰り返されるフィールドセパレータを絞り込みます。

$ ps | egrep 11383 | tr -s ' ' | cut -d ' ' -f 4