それで、私がやりたいことはとても基本的なものですが…どうすればいいのかわかりません。実行中のプログラムがありますが、ps -C "ProgramXX"の出力をファイルにパイプしたいとしましょう。
ps -C "ProgramXX"を実行すると、通常、次のような効果があります。
PID TTY TIME CMD
123 ? 00:00:00 Program1
142 ? 00:00:00 Program1
165 ? 00:00:00 Program1
221 ? 00:00:00 Program1
最初と4番目の列(先頭のヘッダー行を無視)をテキストファイルに入れる「簡単」な方法はありますか?
ps -C "Program1" >> Data.txt...を実行してからスクリプトを実行して脂肪を削除できると思いますか?ところで、これはBashで行われます。 grepなどを使用することもできますが...実際にはわかりません。ところで、これは何度も実行されるので、data.txtは大きくなり続けます。
答え1
から出力を取得する列を制御できますps
。正確なコマンドラインはLinux / Unixのバージョンによって異なりますが、次のコマンドがあなたの要件を満たすと信じています。
ps --no-headers -o pid,comm -C "ProgramXX" >> Data.txt
のマニュアルページには、ps(1)
利用可能なすべてのオプションがリストされています。
答え2
ps
機能性スイス軍用ナイフです。あなたはこれが欲しい
ps -C "ProgramXX" -o pid=,comm=
-o
出力列を制御します。末尾は=
ヘッダーを望まないという意味です。
次のように書くと:
ps -o comm= -o pid= | grep '^ProgramXX'
これはほとんどの実装で動作しますps
。残念ながら、-C
それはGNUismです。
答え3
pgrep -l Program1
希望の結果が得られます。
答え4
cut
awk
私はスペースを計算せずにスペースで区切られた単語を抽出するので、usingの代わりに使用することを好みます。
ps -C "Program 1" | awk '{print $1,$4}'
これは、awk
列に空白値または複数の単語値がある可能性がある出力には良い解決策ではありません。