Help us understand the problem. What is going on with this article?

ファイルの途中行を表示する(便利tips集)

More than 3 years have passed since last update.

TL;DR

  • head | tail はやめましょう. bodyコマンドとかいらないです.
  • GNU環境であれば sed -ns "N,M"を使いましょう. (BSDでは-sオプションがない)
  • 少しリッチに操作したいなら awk 'FNR==N,FNR==M'
  • awkは神コマンド

ファイルの○○○行目から○○○行目までを表示したい

何万行もあるファイルの中から一部分だけ確認するときどうしてますか?
head | tailですか?

僕はawkを使います.
sedもいいですね(コマンドが短くて, 早いので)

N行目からM行目まで表示するのに使うコマンドは各自以下の様な感じになります.

tail_and_head
tail -n + $N | head -n $($N-$M) 
sed
sed -sn 'N,Mp' ファイル名
awk
awk 'FNR==N,FNR==M' ファイル名

head | tail は Bad Practice

head | tail はやめましょう理由は簡単

複数ファイル指定ができないからです

つまりこんな感じにファイルを表示できません.
tail -n + $N * | head -n $($N-$M)

あと評価式を挟む必要があるので
個人的な不満として書きづらいです.

sed, awk は Best Practice

sed(GNU), awkならできます

multiple_file_w_sed
sed -sn 'N,Mp' *
multiple_file_w_awk
awk 'FNR==N,FNR==M' *

sedは相対表示が可能

N行より+10行を表示する
sed -sn 'N,+10p' *

リッチな操作をしたいならawk

ファイルの境目に何か出力したい(GNU)

BEGINFILE or ENDFILE を使う
shell-session:multiple_file_w_awk
awk 'BEGINFILE{print FILENAME} ENDFILE{print "\n"} FNR==N,FNR==M' *

ファイルの境目に何か出力したい(BSD)

BEGINFILE or ENDFILE を使う
shell-session:multiple_file_w_awk
awk 'FNR==1{print FILENAME} FNR==N,FNR==M' *

行番号を表示したい

ファイル毎の行番号を表示したいなら FNR.
複数ファイルを通して 行番号を利用したいならば NR
shell-session:multiple_file_w_awk
awk 'FNR==3,FNR==10{print FNR,$0}' *

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away