Linuxの sed でテキストファイルを決まった行数に分割する

※この記事を読む前に※
これを書いた後に知ったのだが、split を使うと。もっと簡単にできるのでファイル名を細かく設定したいなどのプログラミングの参考として読んでください

Linuxのsed を使うとテキストファイルの特定の範囲の行を切り出すことができる。
たとえば、 seq で 100行発生させて、そのうちの 10~20行目を表示したいときは次の通り:
$ seq 1 100 > 100.txt
$ sed -n 10,20p 100.txt
10
11
12
13
14
15
16
17
18
19
20

$

ログファイルのような大きなファイルを部分的に切り出したいときに使う。
最近、事情により、大きなファイルを10行ずつに分割したファイルを作りたくなった。
やりたいことは、100行のファイルなら、10行の内容で10個のファイルを作る。
出力ファイルの命名規則: out_{開始行番号}-{終了行番号}.txt

div.shというファイル名でシェルスクリプトを書いた
INPUT_FILENAME=$1
NUM_STEP=10
NUM_LINES=$(wc ${INPUT_FILENAME} | cut -d ' ' -f1)

for (( i = 1; i < $((${NUM_LINES})); i+=${NUM_STEP} )); do
n1=$i
n2=$(( ${i} + ${NUM_STEP} - 1 ))
output_filename="out_${n1}-${n2}.txt"
sed -n ${n1},${n2}p ${INPUT_FILENAME} > ${output_filename}
done

実行するとこんな感じ

$ bash div.sh 100.txt
$ ls -1 out_*
out_1-10.txt
out_11-20.txt
out_21-30.txt
out_31-40.txt
out_41-50.txt
out_51-60.txt
out_61-70.txt
out_71-80.txt
out_81-90.txt
out_91-100.txt

以下は広告
sed and awk Pocket Reference: Text Processing with Regular Expressions (Pocket Reference (O&#39;Reilly)) (English Edition) - Robbins, Arnold
sed and awk Pocket Reference: Text Processing with Regular Expressions (Pocket Reference (O&#39;Reilly)) (English Edition) - Robbins, Arnold
Bash Pocket Reference: Help for Power Users and Sys Admins (English Edition) - Robbins, Arnold
Bash Pocket Reference: Help for Power Users and Sys Admins (English Edition) - Robbins, Arnold
Linuxハンドブック ―機能引きコマンドガイド - Daniel J. Barrett, 猪俣 敦夫, 田淵 貴昭, 岡本 健
Linuxハンドブック ―機能引きコマンドガイド - Daniel J. Barrett, 猪俣 敦夫, 田淵 貴昭, 岡本 健

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント