東京都/千代田区/千代田/1-1-1
東京都/中央区/日本橋/1-1-2
東京都/中野区/中央/1-1-3
東京都/渋谷区/神宮前/1-1-4
このようなテキストが並ぶファイルがあるとします。
これの「区」の箇所だけを自動的に抽出したいのです。
以上のテキストが、以下のようになるイメージです。
千代田区
中央区
中野区
渋谷区
「テキスト抽出ソフト」「正規表現」「GREP」というものを使えばできるのかもと考えております。
まず、
1.「東京都/」を消す
2.残ったテキストのうち、「/」の前までを残して後は消去
(ただし改行コードは残す)
これでできると思いますが、実際にどのソフトを使って、どういった正規表現を指定すればいいのかがわかりません。
どなたかよろしくお願い致します。
正規表現に対応したテキストエディタで
1.「東京都/」を「」に置換する(=消す)
2.「区/.*$」を「区」に置換する
という作業をすれば実現できるかと思います。
GREPってのはプログラム言語の関数名のことでしょうか?(UNIXのコマンド?)
tokyosmashの知識がどの程度かわからないのでとりあえず簡単な方法を
1:Microsoft Excelでファイルから開く
2:ファイルを開くウィンドウの下にファイルの種類があるのですべてのファイルにする
3:テキストファイルを選択できるようになる(一覧に出てくる)ので選択
4:テキストファイルウィザードってのが出てくるので"元のデータ形式"をカンマやタブなどの区切り文字によってフィールドごとに区切られたデータにチェック(多分最初からなってる)
5:次へ
6:区切り文字のその他にチェックして右にあるボックスに/を入力
完了すると元のファイルが/でセルごとに区切られてるので~区の列だけ選択してコピーするなりご自由に。
自動的ってのは全部自動ですかね?だったらごめんなさい。
いやーこの方法は思いつきませんでした。
/を区切りに使えばいいのですね。
素晴らしい。
本当にありがとうございます。
この方法だと色々と応用が利きます!
GREPは行を表示するだけなので、部分的に抽出したいのであればPERLなどのテキスト処理スクリプトで行う必要がありますので、敷居は少し高くなりますよ。
Excelを使うなどはダメですか?
A列に住所が並んでいるとして、
B1に =MID(A1,5,SEARCH("/",A1,5)-5)
B2以下はB1をコピー
でお望みの一覧が出来ますけど、、、
なるほどこれでも出来ますね。
神奈川県や和歌山県の場合は微調整すれば。
GREPだと行を抽出するだけなので困っていたのです。ありがとうございます。
Windowsでの作業として
1.
Excelでそのファイルを"/"を区切り文字として読み込めば
あとは切り貼り
2. gawkを使う
http://www.vector.co.jp/soft/win95/util/se376460.html
http://infoshako.sk.tsukuba.ac.jp/ShakoDoc/GNU/AWK/jgawk-jman/ht...
入力ファイルをaddr.txtで漢字がシフト
JISの場合
以下をファイルに保存する ku.awk
# # BEGINは処理開始時に処理される # BEGIN { # 区切り文字を設定する。 FS="/"; } # # 1行単位に処理される # # データ個数が N以上で N番目の文字が区で終わる文字を保存する # # NF: 区切り文字で区切ったときの項目数 # node: 区の住所の個数を数えて保存する # { if( NF>=2 && match($2,".*区$") > 0 ) { node[$1","$2]++; } else if( NF>=3 && match($3,".*区$") > 0 ) { node[$1","$2","$3]++; } else if( NF>=4 && match($4,".*区$") > 0 ) { node[$1","$2","$3","$4]++; }; } # # ENDは処理終了時に処理される # データを抽出したものを表示する。 # END { for( dat in node ) { printf("%s,%d\n",dat,node[dat]); } }
保存したファイル ku.awkとgawkをつって抽出する
したものをソートして ku.csvに保存する
gawk -f ku.awk addr.txt |sort > ku.csv
ku.csvは、住所の区単位に件数を数えたデータ
なのでExcel等で読み込み加工する。
ありがとうございます!
正規表現って便利ですね。
色々と勉強してみようと思います。