Unix / Linux - Pipes and Filters

こんにちは、未来のUnix/Linuxの魔法使いさんたち!今日は、パイプとフィルタの世界に興味深く飛び込みましょう。プログラミングが初めての方也不用担心——私はこれまでに多くの学生を指導してきましたので、ステップバイステップでガイドします。それでは、始めましょう!

Unix / Linux - Pipes & Filters

パイプとフィルタとは?

本題に入る前に、パイプとフィルタが何かを理解しましょう。キッチンで美味しい料理を準備しているとしましょう。それぞれ特定の作業を行う異なる道具があります——包丁で切る、ミキサーで混ぜる、濾し器で濾すなど!Unix/Linuxでは、パイプとフィルタも同様に働きます。

  • フィルタは、入力を受け取り、処理して出力を生成するコマンドです。
  • パイプは、これらのフィルタを結びつける「 plum 」で、データが一つのコマンドから別のコマンドに流れるようにします。

一緒に、データの処理と操作をためす強力なシステムを形成します。では、最も一般的で便利なコマンドいくつかを見てみましょう。

grepコマンド

grepとは?

grepは「Global Regular Expression Print」の略で、特定のパターンをテキストで検索するスーパーパワフルな検索ツールです。

基本用法

基本的な構文は以下の通りです:

grep [オプション] パターン [ファイル...]

簡単な例から始めましょう。fruits.txtというファイルがあり、以下の内容があります:

apple
banana
cherry
date
elderberry
fig
grape

文字'a'を含むすべての果物を探したい場合、以下のようにします:

grep 'a' fruits.txt

これが出力します:

apple
banana
grape

有用なオプション

以下に、grepのいくつかの便利なオプションを示します:

オプション 説明
-i 大文字小文字を区別しない
-v マッチを反転(マッチしない行を表示)
-n 行番号を表示
-c マッチする行の数を数える

いくつか試してみましょう:

grep -i 'A' fruits.txt  # 'a'または'A'を探す
grep -v 'a' fruits.txt  # 'a'を含まない行を探す
grep -n 'e' fruits.txt  # 'e'を含む行の行番号を表示
grep -c 'r' fruits.txt  # 'r'を含む行の数を数える

sortコマンド

sortとは?

sortはその名の通り——ものを並べ替えます。データをアルファベット順や数値順に並べ替える便利なアシスタントのようなものです。

基本用法

基本的な構文は以下の通りです:

sort [オプション] [ファイル...]

fruits.txtファイルを使用して:

sort fruits.txt

これが出力します:

apple
banana
cherry
date
elderberry
fig
grape

有用なオプション

以下に、sortの一般的なオプションを示します:

オプション 説明
-r 逆順
-n 数値順
-u 重複を削除
-k 特定のフィールドで並べ替え

これらを試してみましょう:

sort -r fruits.txt  # 逆アルファベット順

次に、numbers.txtというファイルを作成し、以下の数字を入力します:

5
2
8
1
3

これを数値順に並べ替えます:

sort -n numbers.txt

pgとmoreコマンド

pgとmoreとは?

pgmoreはページングプログラムです。データを一気にすべて提供するのではなく、一ページずつ丁寧に提供してくれる、優しいウェイターのようなものです。

基本用法

moreの場合:

more [オプション] [ファイル...]

pgの場合:

pg [オプション] [ファイル...]

moreを長いファイルで試してみましょう。long_text.txtというファイルを作成し、このチュートリアルの内容を入力します:

more long_text.txt

これは一画面ずつ内容を表示します。スペースキーを押すと次のページが表示され、'q'キーを押すと終了します。

pgは同様に動作しますが、より多くの機能を提供します:

pg long_text.txt

pgでは、':n'で次のページに進む、':p'で前のページに戻る、'/パターン'でテキストを検索することができます。

すべてを合わせて:パイプのパワー

さて、エキサイティングな部分——パイプを使ってこれらのコマンドを組み合わせます!パイプシンボル' | 'は、一つのコマンドの出力を別のコマンドの入力に結びつけます。

employees.txtというファイルを作成し、以下の内容を入力します:

Alice,Sales,50000
Bob,Marketing,45000
Charlie,Engineering,60000
David,Sales,55000
Eve,Marketing,48000
Frank,Engineering,62000

次に、パイプを使って魔法をかけます:

grep 'Sales' employees.txt | sort -k3 -nr

このコマンドは二つのことを行います:

  1. grep 'Sales' employees.txtは'Sales'を含むすべての行を見つけます
  2. 出力はsort -k3 -nrにパイプで送られ、第三フィールドを基に数値順で逆順に並べ替えます。

結果は以下の通りです:

David,Sales,55000
Alice,Sales,50000

すごいですね!データをフィルタし、並べ替える一連の操作を行いました!

結論

そして、みなさん!パイプとフィルタの世界を旅しました。強力なgrep、秩序正しいsort、そして忍耐強いmorepgに会いました。忘れてはならないのは、練習で完璧を追求することです。これらのコマンドをさまざまな方法で組み合わせて試してみると、すぐにUnix/Linuxのパイプマスターになるでしょう!

ハッピーコーディングを、そしてパイプは常に詰まらず、フィルタは常にきれいに保ちましょう!

Credits: Image by storyset