テキストにheadコマンドで見出しをつける

head-title

アニメ「虹色デイズ」。かっこいい男子高校生4人組のラブコメ。奥手な羽柴くん(たぶん主人公)の恋愛はスローペースながらもじっくり進展し、けいちゃんはドSなのでドMの女子しか眼中になく、まっつんはモテモテなんだけど、男子に興味のない難攻不落女子が好きっぽく、つよぽんぬには既に恋人がいます。
各話13分ぐらいなので、時間がない時でも、すぐ見れてしまいます(※)。放映時間はささやかですが、内容はさわやかな少女漫画アニメです。主題歌もSonar Pocketで、さわやかです。

※そもそも時間がない時は見てちゃダメなんですけど、ドラマや映画やアニメは栄養なので。。。朝ごはん食べれない時は、牛乳ぐらいは飲んだ方が体によいですからね。

さて、今回のお題ですが、長いテキストファイルを虹色デイズのように短くまとめたいと思います。テキストの一定量毎にheadで見出しを付けるのですが、まずは、実験に使う長いテキストを作ってみましょう。さくっと作りたい時は、/usr/share/dict/wordsが使いやすいです。

~$ shuf < /usr/share/dict/words | pr -t4 | expand -t2 > hoge
~$ head hoge
chidden     Dionysian     judicature's      incompetent
caddied     proportional      demitasse's       handle's
chord's     virtuoso      dazzled       commingling
sepulchering    fulfilled     longhair        taxi's
drinkable   flimsily      gluttonous        crosier's
flack's     fifteens      massages        damsels
Doe     shortish      oxygenates        bronzing
Tiber's     reoccupy      moisturizing      annuals
sorbet's    Milan       franchisees       shadowboxes
culprits    gladiator's     shrillness's      apprehensive
~$ wc -l hoge
24793 hoge
~$ 

ランダムな英単語のテキスト、hogeを作りました。24793行あります。

このファイルに見出しを一定行毎に付けます。
headの前にsplitを使って、対象となるファイルを見出しを付けたい間隔で分割します。今回は6000行毎に分割します。

~$ split -l6000 -d hoge SECTION:
~$ ls
SECTION:00  SECTION:01  SECTION:02  SECTION:03  SECTION:04  hoge
~$ 

splitコマンドはバイトもしくは行単位でファイルを分割するコマンドです。
-lオプションは、分割する行数を指定します。
-dオプションは、ファイル名を接頭辞+数字の連番にします。

splitで分割したファイルをheadで結合します。見出し行以外をインデントするためにsedで、タブを挿入しています。

~$ head -9999 SEC* | sed '/^==/!s/^/\t/' > hoge2

これで見出し付きのファイルが出来上がりました。見出しが付いているかどうか、行番号付きのgrepで確認してみましょう。
grep の-nオプションで行番号、A2オプションで検索文字列を含む下2行が表示されます。

~$ grep -nA2 SECT hoge2
1:==> SECTION:00 <==
2-	chidden     Dionysian     judicature's      incompetent
3-	caddied     proportional      demitasse's       handle's
--
6003:==> SECTION:01 <==
6004-	tobacconist's   motherless      answerable        anticipates
6005-	slinging    bruiser     drawn       Wiles
--
12005:==> SECTION:02 <==
12006-	reiterating   stabilizes      sorter's        presaging
12007-	gruffest    soft        splurge's       Mick
--
18007:==> SECTION:03 <==
18008-	Loyd's      maidens     presentiment      crackdown's
18009-	I     doffed      cesarean's        charmed
--
24009:==> SECTION:04 <==
24010-	time's      deli        marjoram's        Pyrenees
24011-	zinc's      coaled      halfpence       stray
~$ 

2 responses to “テキストにheadコマンドで見出しをつける

  1. Pingback: viの折り畳み機能(SQL SELECT時に折り畳みマーカー) | コマンドの達人

  2. BS low – raianoiltty high! Really good answer!

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA