中身を見る

INPUT · スライド

頭とお尻だけ見る

01 / 08

全部見たいわけじゃない

前のレッスンで、cat全部出してしまうという弱点を見たね。

でも考えてみると、ファイルを見るとき「全部読みたい」ことはあまり無いよ。

  • どんな形のデータか知りたい → 最初の数行だけあればいい
  • さっき何が起きたか知りたい → 最後の数行だけあればいい

この2つのために headtail があるんだ。

02 / 08

head — 頭から10行

head はファイルの先頭から 10 行だけ出すよ。head(頭)そのままの名前だね。

何行あるファイルでも 10 行で止まる。だからどんなに大きいファイルにも安心して使えるよ。

知らないファイルに出会ったら、まず head。これが端末での作法だよ。

~ $ head access.log01 いちばんめ 起動した02 につ 設定を読んだ(…10 行目まで)

03 / 08

tail — お尻から10行

tail は逆に、最後の 10 行だけ出すよ。tail(しっぽ)だね。

ログを見るときはこちらのほうがよく使う。新しい記録は下に足されていくので、いま起きたことは末尾にあるからだよ。

~ $ tail access.log(…6 行目から)15 じゅうご おわった

04 / 08

-n で行数を変える

10 行が多い・少ないときは -n で数を指定するよ。head -n 3 なら最初の3行だけ。

-n 1 にすれば1行だけ。表の見出しだけ見たいときによく使う形だよ。

~ $ head -n 3 access.log01 いちばんめ 起動した02 につ 設定を読んだ03 さん 接続した

05 / 08

tail -n +N で「N行目から最後まで」

tail-n にはもう1つの書き方があるよ。数の前に + を付けると、「その行から最後まで」という意味になるんだ。

tail -n +2 なら「2行目から最後まで」。つまり1行目だけを捨てるということ。表の見出しを外して中身だけ扱いたいときに使うよ。

-n 2(最後の2行)と -n +2(2行目から最後まで)はまったく違うので、+ の有無に気をつけてね。

~ $ tail -n +14 access.log14 じゅうよん 起きた15 じゅうご おわった

06 / 08

真ん中を切り出す

headtail はどちらも「端から」しか切れない。じゃあ真ん中はどうするか。

2つ重ねればいいんだ。head -n 5 で先頭5行にしてから、その結果の tail -n 2 を取れば、4行目と5行目が残る。

重ねるための記号が |(パイプ)だよ。これも「つなぐ」の章の主役なので、いまはそういうことができると知っておいて大丈夫。

~ $ head -n 5 access.log | tail -n 204 よん 応答した05 ご 書きこんだ

07 / 08

ファイルが2つ以上のときは見出しが付く

headtail にファイルを2つ以上渡すと、どのファイルの分かが分かるように見出しが付くよ。

cat は何も付けずにつないでしまったけれど、こちらは ==> ファイル名 <== という行が挟まる。

目で確かめるときは便利だけれど、次のコマンドに渡すときは邪魔になる。そういうときは1つずつ渡すか、-q を足して見出しを消すよ。

~ $ head -n 1 kiroku/mijikai.txt kiroku/nagai.txt==> kiroku/mijikai.txt <====> kiroku/nagai.txt <==ぎょう1

08 / 08

さあ、打ってみよう

access.log は 15 行のファイルだよ。行の頭に番号が入っているので、どこを切り出せたか目で確かめられる

-n の数を変えて、出てくる範囲がどう動くかを見てみよう。