第 1 回 - フィルタ,シェルスクリプトの基礎(1)

[9/19, 2009 H.Aman]
67x27(1669bytes)   67x27(1669bytes) 【課題 1】

例題 1

いま,データファイル ex1.txt の中に整数がいくつか記録されている (一行に一つずつ).
この中からの最大値を見つけ出して出力しなさい.

※データファイル ex1.txt は上のリンクを右クリックし, 「名前を付けて保存」を選んでダウンロードすること.

解答例

     sort -n ex1.txt | tail -n 1
     

解説

ここでは二つのコマンドが登場している:
  • sort
    与えられたファイルをソートして表示する.
    ソートは辞書式に行われるが, -n オプションを指定すれば数値として昇順にソートされる. 降順にしたい場合は -nr オプションを指定する.
  • tail
    与えられたファイルの末尾を表示する.
    デフォルトでは 10 行だけ表示されるが, -n オプションで表示行数を指定できる.
    ファイルが指定されない場合は代わりに標準入力 が使われる.
(1)まず,"|" よりも左側から見ていくと,
     sort -n ex1.txt | tail -n 1
これにより,ex1.txt の内容を数値と見なして(-n オプション)昇順にソートして出力する.

(2)ここで,sort コマンドの結果を画面に出力するのではなく, 別のコマンドの入力へ直接流し込む:

     sort -n ex1.txt | tail -n 1
記号 "|" はコマンド間でのデータの パイプ 役を果たしている.

(3)最後にパイプ経由で流れてきたデータの末尾の 1 行だけ(-n 1 オプション)を出力する:

     sort -n ex1.txt | tail -n 1
tail コマンドの入力として流れ込んでくるデータは,先に sort コマンドによって昇順(大きい順)に並べ替えられているため, 最後の一行には最大値が登場するようになっている.

ゆえに,上の解答例に示したコマンド列を実行すると, ex1.txt の中の最大値のみが画面に出力される.