管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

KEN_ALL.CSVを都道府県毎に分解したCSVを作成する(sed等)

KEN_ALL.CSV(郵便番号データ)をsed等を使って、都道府県毎に分解したCSVファイルを作成してみました。

確認環境

[ec2-user@ip-192-168-X-XX ~]$ cat /etc/*-release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
Amazon Linux AMI release 2018.03
[ec2-user@ip-192-168-X-XX ~]$ sed --version
GNU sed version 4.2.1
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

KEN_ALL.CSVファイルの内容(一部抜粋)

01101,"060 ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
01101,"064 ","0640941","ホッカイドウ","サッポロシチュウオウク","アサヒガオカ","北海道","札幌市中央区","旭ケ丘",0,0,1,0,0,0
01101,"060 ","0600041","ホッカイドウ","サッポロシチュウオウク","オオドオリヒガシ","北海道","札幌市中央区","大通東",0,0,1,0,0,0
01101,"060 ","0600042","ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(1-19チョウメ)","北海道","札幌市中央区","大通西(1~19丁目)",1,0,1,0,0,0
01101,"064 ","0640820","ホッカイドウ","サッポロシチュウオウク","オオドオリニシ(20-28チョウメ)","北海道","札幌市中央区","大通西(20~28丁目)",1,0,1,0,0,0
...

コード

※処理にあたり、KEN_ALL.CSVをUTF8に変換しています。

#!/usr/bin/bash

# 7列目(漢字都道府県名)でグルーピングして都道府県名リストを作成
# ”北海道"のような結果が得られるため、「"」を除去しておく
pref_names=`cat ken_all.csv | cut -d , -f 7 | sed -e "s/\"//g" |sort | uniq`

for pref_name in ${pref_names};
do
    # 都道府県名を含む行を抽出して、<都道府県名>.csvを作成する
    # sed -neの「n」は結果に合致する行のみを出力するオプション
    # 「//p」は処理内容を出力するスクリプトコマンド(上述の -nと一緒に使用する)
    cat ken_all.csv | sed -ne "/${pref_name}/p"  > ./csvs/${pref_name}.csv
done

実行結果と結果の確認

都道府県毎に作成されたファイルの件数、合計件数について、元ファイルの内容と一致しました。

[ec2-user@ip-192-168-X-XX csvs]$ ls -al
total 17916
drwxrwxr-x 2 ec2-user ec2-user    4096 Jul 22 13:55 .
drwx------ 5 ec2-user ec2-user    4096 Jul 22 14:05 ..
-rw-rw-r-- 1 ec2-user ec2-user  333961 Jul 22 13:56 三重県.csv
-rw-rw-r-- 1 ec2-user ec2-user 1135724 Jul 22 13:56 京都府.csv
-rw-rw-r-- 1 ec2-user ec2-user  121807 Jul 22 13:56 佐賀県.csv
-rw-rw-r-- 1 ec2-user ec2-user  759267 Jul 22 13:56 兵庫県.csv
-rw-rw-r-- 1 ec2-user ec2-user 1304052 Jul 22 13:56 北海道.csv
...

[ec2-user@ip-192-168-X-XX csvs]$ find ./ -type f -name "*.csv" | xargs wc -l
    1426 ./徳島県.csv
    3257 ./富山県.csv
     877 ./宮崎県.csv
    2072 ./岩手県.csv
     950 ./山梨県.csv
    2263 ./福井県.csv
    1459 ./鹿児島県.csv
    2516 ./青森県.csv
    1397 ./鳥取県.csv
  124263 total
    ...

参考にしました