sgykfjsm.github.com

区切り文字がASCII 001なファイルを扱う

awsのhiveでS3に直接ファイルを出力すると区切り文字がASCII 001(Ctrl + A)になる。
ASCII文字なので、普通にcatしてもパッと見は区切りが無いように見えるがvimなどで開いてみると以下のように見える。

1
2
3
4
5
6
7
8
9
10
# 普通にcatすると以下のように見える
# hadoop@xxxxxxx:~$ hadoop dfs -cat s3://xxxxxxxxxx/export/20130428/000000
# 13/04/28 15:11:56 INFO s3native.NativeS3FileSystem: Opening 's3://xxxxxxxxxx/export/20130428/000000' for reading
# 27882858018
# 2783112276000
# 277864377980
# vimで開くと以下のように見える
278828<01>5801<01>8
278311<01>227600<01>0
277864<01>37798<01>0

これをダウンロードしてローカルで取り扱う場合は以下の様な方法がある。

1
2
3
4
5
[sgyk@fujishima] 13-04-29 0:19:48 /tmp
$ awk -F"\001" '{print $1", "$2", "$3}' 000000
278828, 5801, 8
278311, 227600, 0
277864, 37798, 0

要するにawkで区切り文字を\001で指定できるよ、っていうだけ。
なお、使用したawkのバージョンは以下のとおり。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[sgyk@fujishima] 13-04-29 0:36:49 /tmp
$ awk --version
GNU Awk 4.0.2
Copyright (C) 1989, 1991-2012 Free Software Foundation.

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program. If not, see http://www.gnu.org/licenses/.