UEC - UNIXを深く理解し、シェルプログラミングを極めるコミュニティサイト

- Tukubaiマニュアル
  - cgi-name(1)
  - check_attr_name(1)
  - check_need_name(1)
  - comma(1)
  - count(1)
  - ctail(1)
  - delf(1)
  - divsen(1)
  - getfirst(1)
  - getlast(1)
  - gyo(1)
  - han(1)
  - join0(1)
  - join1(1)
  - join2(1)
  - juni(1)
  - kasan(1)
  - keta(1)
  - keycut(1)
  - loopj(1)
  - loopx(1)
  - map(1)
  - marume(1)
  - mdate(1)
  - mime-read(1)
  - mojihame(1)
  - nameread(1)
  - plus(1)
  - rank(1)
  - ratio(1)
  - retu(1)
  - self(1)
  - sm2(1)
  - sm4(1)
  - sm5(1)
  - tarr(1)
  - tateyoko(1)
  - tcat(1)
  - unmap(1)
  - up3(1)
  - yarr(1)
  - ycat(1)
  - yobi(1)
  - ysum(1)
  - zen(1)
  - タグ形式(5)
  - ネーム形式(5)
  - フィールド形式(5)

# Tukubaiオンラインコマンドマニュアル

## keycut(USP Lab(1))

### 【名前】

keycut : キーでファイルを分割

### 【書式】

    Usage	: keycut [options] <filename> <file>
    Options	: -d : キーの削除
    	: -a : ファイル追記
    	: -z : 圧縮
    Version	: Thu Dec 15 13:46:38 JST 2011
    (Version: zlib-1.2.3 )

### 【説明】

<file>を読み込み、分割先ファイル名<filename>で指定したキーフィールドの値が同一の行でファイルを分割する。例えば、第2フィールドが同じ値を持つ行でファイルを分割したいときは、data.%2のように<filename>を指定する。この時、分割先ファイル名はdata.(第2フィールドの値)となる。

なお、keycutを使用する場合にはキーフィールドの値は事前に整列されている必要がある(内部的にはキーフィールドが変化したところでファイルに出力している)。<filename>におけるキーフィールドは%(フィールド番号)と指定するが、%5.2 %5.1.3のようにサブストリング指定も可能である。

### 【例1】基本的な使用方法

    $ cat data
    01 埼玉県 03 熊谷市 82 0 23 84 10
    01 埼玉県 01 さいたま市 91 59 20 76 54
    02 東京都 04 新宿区 30 50 71 36 30
    02 東京都 05 中央区 78 13 44 28 51
    03 千葉県 10 千葉市 52 91 44 9 0
    03 千葉県 12 柏市 95 60 35 93 76
    04 神奈川県 13 横浜市 92 56 83 96 75
    04 神奈川県 16 小田原市 45 21 24 39 03
    $

    $ keycut data.%1 data

    $ ls -l data.*
    -rw-r--r-- 1 usp usp 87 2009-02-19 11:14 data.01	←4つのファイルに分割
    -rw-r--r-- 1 usp usp 82 2009-02-19 11:14 data.02
    -rw-r--r-- 1 usp usp 77 2009-02-19 11:14 data.03
    -rw-r--r-- 1 usp usp 91 2009-02-19 11:14 data.04
    $

    $ cat data.01
    01 埼玉県 03 熊谷市 82 0 23 84 10
    01 埼玉県 01 さいたま市 91 59 20 76 54
    $

    $ cat data.02
    02 東京都 04 新宿区 30 50 71 36 30
    02 東京都 05 中央区 78 13 44 28 51
    $

    $ cat data.03
    03 千葉県 10 千葉市 52 91 44 9 0
    03 千葉県 12 柏市 95 60 35 93 76
    $

    $ cat data.04
    04 神奈川県 13 横浜市 92 56 83 96 75
    04 神奈川県 16 小田原市 45 21 24 39 03
    $

### 【例2】サブストリング指定

    $ keycut data.%1.2.1 data

    $ ls -l data.*
    -rw-r--r-- 1 usp usp 87 2009-02-19 11:15 data.1
    -rw-r--r-- 1 usp usp 82 2009-02-19 11:15 data.2
    -rw-r--r-- 1 usp usp 77 2009-02-19 11:15 data.3
    -rw-r--r-- 1 usp usp 91 2009-02-19 11:15 data.4
    $

### 【例3】-aオプション使用例

-aオプションを指定すると分割先ファイルは追記されるようになる。分割先ファイルがないときは新たに作成される。このオプションを指定しない場合にはファイルは上書きとなる。

    $ keycut data.%1 data

    $ keycut -a data.%1 data

    $ ls -l data.*
    -rw-r--r-- 1 usp usp 174 2009-02-19 11:16 data.01
    -rw-r--r-- 1 usp usp 164 2009-02-19 11:16 data.02
    -rw-r--r-- 1 usp usp 154 2009-02-19 11:16 data.03
    -rw-r--r-- 1 usp usp 182 2009-02-19 11:16 data.04
    $

    $ cat data.01
    01 埼玉県 03 熊谷市 82 0 23 84 10
    01 埼玉県 01 さいたま市 91 59 20 76 54
    01 埼玉県 03 熊谷市 82 0 23 84 10
    01 埼玉県 01 さいたま市 91 59 20 76 54
    $

### 【例4】-dオプション使用例

-dオプションを指定すると、キーフィールドを除いた行を分割先ファイルに作成するようになる。キーフィールド指定が%1.2.1等のサブストリング指定であっても、キーフィールド全体(この例だと第1フィールド全体)が取り除かれる。

    $ keycut -d data.%1 data

    $ ls -l data.*
    -rw-r--r-- 1 usp usp 81 2009-02-19 13:13 data.01
    -rw-r--r-- 1 usp usp 76 2009-02-19 13:13 data.02
    -rw-r--r-- 1 usp usp 71 2009-02-19 13:13 data.03
    -rw-r--r-- 1 usp usp 85 2009-02-19 13:13 data.04
    $

    $ cat data.01
    埼玉県 03 熊谷市 82 0 23 84 10
    埼玉県 01 さいたま市 91 59 20 76 54
    $

### 【例5】-zオプション使用例

-zオプションを指定すると、出力ファイルがGzip圧縮形式になる。

    $ keycut -z data.%1.gz data

    $ ls -l data.*
    -rw-r--r-- 1 usp usp  98 2009-02-19 13:17 data.01.gz
    -rw-r--r-- 1 usp usp  94 2009-02-19 13:17 data.02.gz
    -rw-r--r-- 1 usp usp  82 2009-02-19 13:17 data.03.gz
    -rw-r--r-- 1 usp usp 100 2009-02-19 13:17 data.04.gz
    $

    $ gunzip < data.01.gz
    01 埼玉県 03 熊谷市 82 0 23 84 10
    01 埼玉県 01 さいたま市 91 59 20 76 54
    $

### 【備考1】

keycut.cはzlibライブラリを使用している。コンパイル時は次のようにオプションが必要。

    $ cc keycut.c -lz -o /home/TOOL/keycut

### 【備考2】

-aオプションと-zオプションを併用したときは、すでに存在する圧縮ファイルに圧縮ファイルが追記される。生成されるファイルはgunzip(1)コマンドで展開できるが、仕様的に正しい動作はどうかは未調査。

- ∧

last modified: 2012-04-11 13:20:15