01 / 08
全部見たいわけじゃない
前のレッスンで、cat は全部出してしまうという弱点を見たね。
でも考えてみると、ファイルを見るとき「全部読みたい」ことはあまり無いよ。
- どんな形のデータか知りたい → 最初の数行だけあればいい
- さっき何が起きたか知りたい → 最後の数行だけあればいい
この2つのために head と tail があるんだ。
中身を見る
INPUT · スライド
01 / 08
前のレッスンで、cat は全部出してしまうという弱点を見たね。
でも考えてみると、ファイルを見るとき「全部読みたい」ことはあまり無いよ。
この2つのために head と tail があるんだ。
02 / 08
head はファイルの先頭から 10 行だけ出すよ。head(頭)そのままの名前だね。
何行あるファイルでも 10 行で止まる。だからどんなに大きいファイルにも安心して使えるよ。
知らないファイルに出会ったら、まず head。これが端末での作法だよ。
~ $ head access.log01 いちばんめ 起動した02 につ 設定を読んだ(…10 行目まで)03 / 08
tail は逆に、最後の 10 行だけ出すよ。tail(しっぽ)だね。
ログを見るときはこちらのほうがよく使う。新しい記録は下に足されていくので、いま起きたことは末尾にあるからだよ。
~ $ tail access.log(…6 行目から)15 じゅうご おわった04 / 08
10 行が多い・少ないときは -n で数を指定するよ。head -n 3 なら最初の3行だけ。
-n 1 にすれば1行だけ。表の見出しだけ見たいときによく使う形だよ。
~ $ head -n 3 access.log01 いちばんめ 起動した02 につ 設定を読んだ03 さん 接続した05 / 08
tail の -n にはもう1つの書き方があるよ。数の前に + を付けると、「その行から最後まで」という意味になるんだ。
tail -n +2 なら「2行目から最後まで」。つまり1行目だけを捨てるということ。表の見出しを外して中身だけ扱いたいときに使うよ。
-n 2(最後の2行)と -n +2(2行目から最後まで)はまったく違うので、+ の有無に気をつけてね。
~ $ tail -n +14 access.log14 じゅうよん 起きた15 じゅうご おわった06 / 08
head と tail はどちらも「端から」しか切れない。じゃあ真ん中はどうするか。
2つ重ねればいいんだ。head -n 5 で先頭5行にしてから、その結果の tail -n 2 を取れば、4行目と5行目が残る。
重ねるための記号が |(パイプ)だよ。これも「つなぐ」の章の主役なので、いまはそういうことができると知っておいて大丈夫。
~ $ head -n 5 access.log | tail -n 204 よん 応答した05 ご 書きこんだ07 / 08
head と tail にファイルを2つ以上渡すと、どのファイルの分かが分かるように見出しが付くよ。
cat は何も付けずにつないでしまったけれど、こちらは ==> ファイル名 <== という行が挟まる。
目で確かめるときは便利だけれど、次のコマンドに渡すときは邪魔になる。そういうときは1つずつ渡すか、-q を足して見出しを消すよ。
~ $ head -n 1 kiroku/mijikai.txt kiroku/nagai.txt==> kiroku/mijikai.txt <==あ==> kiroku/nagai.txt <==ぎょう108 / 08
access.log は 15 行のファイルだよ。行の頭に番号が入っているので、どこを切り出せたか目で確かめられる。
-n の数を変えて、出てくる範囲がどう動くかを見てみよう。