notebook

都内でWEB系エンジニアやってます。

最初と最後の数行を指定して除いた中身を表示する

よくあるやつだがたまにやろうとするとぱっと出てこなかったので残しておく

たとえば

lintの結果のテキストファイルをさっと集計したいとかそういった場合

最初の3行は警告とは関係ない説明とかコマンド詳細などが表示されていて

最後の3行はSummaryが表示されているというような場合

中身を抜き出してさっと集計するためには、まず最初と最後の固定情報を削っておきたい

サンプル

理解しやすくするために、行頭に行数を載せている

  • sample.txt
$ cat sample.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff
7 ggg
8 hhh
9 iii
10 jjj

3行目以降を表示

$ tail -n +3 sample.txt
3 ccc
4 ddd
5 eee
6 fff
7 ggg
8 hhh
9 iii
10 jjj

下から3行目以前を表示

$ head -n -3 sample.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff
7 ggg

最初と最後の数行を除いた中身を表示

結論はここ

  • 上から3行目以降、下から3行目までは除いたテキストを表示
$ tail -n +3 sample.txt | head -n -3
3 ccc
4 ddd
5 eee
6 fff
7 ggg

おまけ

-nオプションを試す

やっているうちによくわからなくなってきてしまったので、いくつかパターンを試してみた

$ tail -n +3 sample.txt
3 ccc
4 ddd
5 eee
6 fff
7 ggg
8 hhh
9 iii
10 jjj
$ tail -n -3 sample.txt
8 hhh
9 iii
10 jjj
$ head -n +3 sample.txt
1 aaa
2 bbb
3 ccc
$ head -n -3 sample.txt
1 aaa
2 bbb
3 ccc
4 ddd
5 eee
6 fff
7 ggg

イメージ

おわり

tail, headコマンドで最初と最後の数行を除いて中身を表示した

こういうことやりたくなるケースはぼちぼちありそうだなって感じなので覚えておく