« WordPressのパーマリンク設定 Main 秋吉敏子の食彩浪漫、Live365 »

指定カラムを抜き出すコマンド

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 の出力の場合とかでも生じるしね。

関連リンク

Leave a comment

Your comment