課題解決Tips

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

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

はじめに

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

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

csplit コマンドの使い方

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

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

brew install coreutils

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

gcsplit [counter]

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

aaa
bbb
ccc
aaa
bbb
ccc

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

gcsplit sample.txt /bbb/

こうなります

ファイル 1

aaa

ファイル 2

bbb
ccc
aaa
bbb
ccc

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

gcsplit sample.txt /bbb/ {2}

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

aaa

ファイル 2

bbb
ccc
aaa

ファイル 3

bbb
ccc

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

gcsplit sample.txt /bbb/ {*}

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

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

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