試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

テキストファイルの特定の行範囲をコマンドで取り出す

「ファイルの先頭や末尾を取り出すコマンド(headとtail)について(テスト用データの準備とheadコマンド)」と「ファイルの先頭や末尾を取り出すコマンド(headとtail)について(tailコマンドとファイル末尾追跡)」で扱った2つのコマンドを組み合わせて用いると、テキストファイルの特定の範囲の行を取り出す操作が色々と行える。

先頭から数えた行番号による操作例

テスト用データは下のようにして生成されたものとする。「連番を生成する(コマンドとシェルによる方法)」も参照。

$ seq -f '%g 行目' 100

末尾に「| less」を付けて内容を確認することもできる。
以下は実際の操作例。

(77行目だけを取り出す/行番号「77」による指定)
$ seq -f '%g 行目' 100 | head -n 77 | tail -n 1
77 行目

(31行目を最初の行として5行を取り出す/最初の行「31」と行数「5」による指定)
$ seq -f '%g 行目' 100 | tail -n +31 | head -n 5
31 行目
32 行目
33 行目
34 行目
35 行目

(31行目を最後の行として5行を取り出す/最後の行「31」と行数「5」による指定)
$ seq -f '%g 行目' 100 | tail -n +$((31 - (5 - 1))) | head -n 5
27 行目
28 行目
29 行目
30 行目
31 行目

(61行目から66行目を取り出す/最初の行「61」と最後の行「66」による指定)
$ seq -f '%g 行目' 100 | tail -n +61 | head -n $((66 - (61 - 1)))
61 行目
62 行目
63 行目
64 行目
65 行目
66 行目

末尾から数えた行番号による操作例

テスト用データは下のようにして生成されたものとする。

$ seq -f '後ろから %g 行目' 100 -1 1

末尾に「| less」を付けて内容を確認することもできる。
以下は実際の操作例。

(後ろ73行目だけを取り出す/行番号「73」による指定)
$ seq -f '後ろから %g 行目' 100 -1 1 | tail -n 73 | head -n 1
後ろから 73 行目

(後ろ81行目を最初の行として5行を取り出す/最初の行「81」と行数「5」による指定)
$ seq -f '後ろから %g 行目' 100 -1 1 | tail -n 81 | head -n 5
後ろから 81 行目
後ろから 80 行目
後ろから 79 行目
後ろから 78 行目
後ろから 77 行目

(後ろ81行目を最後の行として5行を取り出す/最後の行「81」と行数「5」による指定)
$ seq -f '後ろから %g 行目' 100 -1 1 | tail -n $((81 + (5 - 1))) | head -n 5
後ろから 85 行目
後ろから 84 行目
後ろから 83 行目
後ろから 82 行目
後ろから 81 行目

(後ろ42行目から39行目を取り出す/最初の行「42」と最後の行「39」による指定)
$ seq -f '後ろから %g 行目' 100 -1 1 | tail -n 42 | head -n $((42 - (39 - 1)))
後ろから 42 行目
後ろから 41 行目
後ろから 40 行目
後ろから 39 行目

関連記事: