コマンド紹介シリーズ:peco
コマンド紹介シリーズ第7回は、pecoというコマンドを紹介します。pecoを使うとクエリを用いてログやプロセスなどをフィルタリングできます。今回はそのようなpecoについて紹介しようと思います。
なお、第6回は以下になりますので、ぜひご興味があればご覧ください。
pecoとは?
pecoとは公式の説明によると、
peco can be a great tool to filter stuff like logs, process stats, find files, because unlike grep, you can type as you think and look through the current results.
と言うことで、冒頭に説明した通りログやプロセススタッツといった様々なテキストデータに対してフィルタリングをすることができるツールとなっています。例えばghqと言うコマンドを使ったことがある方であれば、その設定の過程でpecoを使ったことがあるのではないかなと思います。私自身ghqを利用する時くらいしか使ったことがなかったのですが、調べてみると便利そうだったので今回調べてみました。
使ってみる
インストール
今回も相変わらずですがmacbookを使っているので以下のコマンドでインストールしました。
brew install peco
そのほかのインストール方法については以下をご参照ください。
テキストの検索
ここではデータサイエンティストを目指す方なら結構通った道と思われるタイタニックの生存者を予測するタスクで用いられるCSVファイルを使ってみようと思います。データセットについては以下を参照ください。
まずはデータをtitanic.csvと言うファイル名で保存し、どのようなデータがあるか確認してみます。データの確認はbatを使って確認してみます。batについては以下の記事で解説しているのでぜひ参照ください。
bat titanic.csv

データをみると、12列のデータであり、データ型は整数値や文字列、また一部欠損データがあります。ちなみに、batを使っても検索は可能で例えば/hgoehogeのように入力するとhogehogeと言う文字列を検索できます。
それではこのファイルをpecoで開いてみましょう。開き方はいくつかありますが、まずは直接pecoで開いてみましょう。
peco titanic.csv

pecoで開くと画面上部にQUERY>と言う記載があり、その下にデータが並んでいます。pecoではこのQUERY>の部分にクエリを設定することで該当する文字列が含まれる行のみが表示されます。試しに性別がfemaleの行だけ取り出してみると、以下のようになりました。

結果をみると、femaleの場所がハイライトされており、検索結果は全てfemaleが含まれていることがわかります。また検索条件には複数指定することができ、例えばMissを追加してみると以下のようになりました。

femaleかつMissが含まれる行だけ抽出できました。なお、右上にIgnoreCaseとあるように、文字の大小は現時点では区別されていないので、例えばMissをmISSのようにしても同じ結果となります。

検索文字の絞り込み方法について
pecoでは以下の絞り込み方法が提供されています。
- CaseSensitive: 文字の大小を区別
- IgnoreCase: 文字の大小は区別しない
- SmartCase: 全てのクエリが小文字の時はCaseSensitiveではなく、それ以外はCaseSensitiveに動作する
- Regex: 正規表現を利用
- Fuzzy: 文字列の部分的なパターンを許可して検索
起動時はIgnoreCaseですが、<C-rを実行することで切り返すことが可能です。CaseSensitiveにした上で先ほどのfemaleとmISSを検索条件に指定すると以下のように検索結果がなくなることが確認できました。

パイプを用いた実行
上記の例ではファイルを直接pecoで開きましたが、パイプを利用してテキストを受け渡すことができます。例えば以下のようにです。
cat titanic.csv | peco
その他オプション紹介
まずは表示順を上からではなくしたからできるようにレイアウトを変更するには--layout=bottom-upを指定します。
peco titanic.csv --layout=bottom-up

次に、実行時点でクエリを登録しておきたいときは--query hgeohogeと設定します。
peco titanic.csv --query female
まとめ
今回はpecoについて紹介しました。ghqコマンドの利用設定で初めて知りましたが、今回使ってみると検索がとてもしやすく便利だなと思いました。普段はvimやbatを使っていてそこで検索していましたが、pecoだとそもそもマッチする行しか表示されないようにできるのでとても便利です。ぜひ皆さんも使ってみてください。
Discussion