忍者ブログ
 

東京・赤坂のシステム開発会社プラムザで働く、プログラマーの学習記録。

csplitコマンドでテキストデータを、キーワードごとにファイル分割する

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

csplitコマンドでテキストデータを、キーワードごとにファイル分割する

今回はlinuxのcsplitコマンドについて書きます。
テキストデータをキーワードで区切って、ファイルに分割したいと思って調べていたところ、このコマンドを発見しました。なかなか便利なコマンドです。
複雑なキーワードのマッチは苦手そうですが、シンプルなフォーマットのテキストであれば手軽に分割できます。
動作を確認する簡単なサンプルを以下に記します。
まず、検証用のダミーテキストファイルを作成します。


test.txt
* 関数の定義のテンプレート
    /**
     * @param int $var1
     * @param string $var2
     * @return .....
     */
    function funcSample($var1, $var2) {
        return false;
    }
##2014-11-03_mon
test.txt
 * 適当な文字列
 * あいうえお
 * かきくけこ
 * さしすせそ
##2014-11-04_tue
 * memo:xx-xxxx-xxxx
##2014-11-05_wed
 * なにかてきとうな文字列
 * ・・・・・・
##2014-11-06_thu

 *

 *

 *

 *

次に、csplitコマンドを記述したシェルスクリプトを作成し、このスクリプトを実行します。


csplit_test.sh
#!/bin/bash
csplit -z -f "test-" -b "%05d.txt"   test.txt /^##[0-9][0-9][0-9][0-9].*$/ {*}

これを実行すると、##yyyyで始まる箇所を区切りとして、ファイルに分割されます。
分割されたものは、"test-連番.txt" というファイルに保存されます。
便利なコマンドを駆使して、効率よく作業していきたものですね。

※csplitのhelp (csplit --helpの出力の一部抜粋)はこちらです。
使用法: csplit [オプション]... ファイル パターン...
Output pieces of FILE separated by PATTERN(s) to files `xx00', `xx01', ...,
and output byte counts of each piece to standard output.

長いオプションに必須の引数は短いオプションにも必須です.
  -b, --suffix-format=FORMAT  use sprintf FORMAT instead of %02d
  -f, --prefix=PREFIX        use PREFIX instead of `xx'
  -k, --keep-files           do not remove output files on errors
  -n, --digits=DIGITS        2 の代わりに指定された数字を使う
  -s, --quiet, --silent      出力ファイルの大きさを表示しない
  -z, --elide-empty-files    空の出力ファイルを削除
      --help     この使い方を表示して終了
      --version  バージョン情報を表示して終了

ファイルが - ならば標準入力を読み込みます. 各々のパターンは:

  行数                     指定行の直前まで(その行は含まれない)を書き込む
  /正規表現/[オフセット]   一致する行の直前までを書き込む
  %%正規表現%%[オフセット] 一致する行の直前までをスキップ
  {整数値}                 直前のパターンを指定した数だけ繰り返す
  {*}                      直前のパターンを可能なだけ繰り返す

オフセットの指定には `+' または `-' に正の整数値を続けて指定します.
PR

コメント

プロフィール

HN:
はと
性別:
非公開

P R