指定カラムを抜き出すコマンド
ps で出力されたプロセス状況を受け取って、冒頭のプロセス番号のみを抜き出すのに
ps -ax | awk ‘{print $1}’
などとしているのだが、単にひとつの要素を抜き出すのに記述する awk の部分が長すぎるし、$やら{やらの入力も煩雑だ。もっと簡単に抜き出せないものか。
探していると、UNIX に cut という標準コマンドがあり、これを使えば「cut -f 1」などと抜き出したいフィールド番号を指定することができるようだ。ただ、標準のデリミタはタブで -d オプションで切り替えもできるものの、ps からの出力のような連続空白でのセパレータを扱うのは難しいらしい。
何か関連情報はないかと「cut コマンド awk デリミタ」で検索をしてみたら、gawk のマニュアルに awk で実現する cut コマンドが紹介されていた。
cut
ユーティリティは、標準入力からの入力中にあるキャラクタかフィー ルドに対して選択もしくは”カット”(cut)を行い、その結果を標準出力に送る。cut
は キャラクタのリストか、フィールドのリストを切り出すことができ る。デフォルトでは、フィールドはタブで区切られているとみなされるが、コマ ンドラインオプションで指定することによりフィールドデリミッタ(filed delimiter)、言い換えればフィールドを区切るキャラクタを指定することもできる。cut
の定義するフィールドはawk
程には汎用性はない。
awk
によるcut
は、getopt
ライブラリ関数 (セクション コマンドラインオプションの処理を参照), とjoin
ライブラリ関数 (セクション Merging an Array Into a Stringを参照). を使っている
どうも、標準では欲しい用途のコマンドはないようだ。この awk 版を cut として使おうかなぁ。
指定キーワードでプロセス番号を検索して出力するコマンドに
- 指定カラムを抜き出すということで、col という名前でシェルスクリプトでも書こうかと思ったが、この名前のコマンドは既に「入力から逆行送りを取り除く」というものとして存在していた。sel というコマンドはないようなので、選択するということで こちらとか。
指定キーワードでプロセス番号を検索して出力するコマンドに pgrep というものもあるようなのだが、指定カラムを抜き出したいのは ls -l の出力の場合とかでも生じるしね。
関連リンク
- cut – Wikipedia
- フィルタを使用した文字列操作 2 – UNIX & Linux コマンド・シェルスクリプト リファレンス
- Y’s Weblog B-Site: cutでデリミタとして連続スペースを使う
- プロセスIDだけ抽出する。 (SaikyoLine.jp)