課題解決Tips

正規表現でテキストファイルを分割する

salmoncode
記事内に商品プロモーション(Amazonアソシエイト含む)を含む場合があります。

はじめに

過去ブログのデータを移行しようとエクスポートしたら、1 つの MT ファイルとして出力されてしまいました。
仕方ないので、いい感じにファイルを分割したいと思ったのですがコードを書くのは面倒です…

そこで調べてみたところ、`csplit`というコマンドで正規表現による分割ができるようですね。
ちょっと使い方に癖があったのでメモしておきます。

csplit コマンドの使い方

まず、Mac の csplit コマンドは Linux のそれと仕様が違います。**
ググって出てきた使い方だとうまく動かないという罠があります w

なので、まずは gnu 版をインストールしましょう。

1brew install coreutils

基本的なコマンドは以下の通りです。

1gcsplit [counter]

例えば以下のような`sample.txt`があったとします。

aaa
bbb
ccc
aaa
bbb
ccc

ここで以下のコマンドを打つと、

1gcsplit sample.txt /bbb/

こうなります

ファイル 1

aaa

ファイル 2

bbb
ccc
aaa
bbb
ccc

元ファイル 5 行目の`bbb`でも分割したい場合は`counter`を設定します。

1gcsplit sample.txt /bbb/ {2}

するとこんな感じに
ファイル 1

aaa

ファイル 2

bbb
ccc
aaa

ファイル 3

bbb
ccc

つまり、ヒットしたパターンの行の直前で分割されるようですね。
ちなみに、ヒットした行全て分割したい場合は以下のようにします。

1gcsplit sample.txt /bbb/ {*}

シンプルに指定できてなかなか便利なコマンドですね。

こういったテキスト処理系は魔術にならない程度にコマンドを駆使して高速化しましょう。

ABOUT ME
サーモン
サーモン
著者(ソフトウェアエンジニア)
情報系大学院を卒業後、ソフトウェアエンジニアとして都内企業に従事。プログラミング歴は10年以上になります。
記事URLをコピーしました