我需要的数据格式:
12cef8e1b711a351 [1377045694501,1377045728475,1377045709652]
12cf3cb988f10a87 [1380741459591,1380739871201,1380739785397,1380740303830,1380739849591]
12d1be8adb90a88b [1375541238666,1375541281821]
12d29ba61341e7ce [1377855844089,1377855785342]
12d2e28e50d42d19 [1381974506104,1381973579872,1377988785664,1381976074258]
我拥有的数据格式 - 所有内容都以制表符分隔:
12cef8e1b711a351 1377045694501 377045728475 1377045709652
12cf3cb988f10a87 1380741459591 1380739871201 1380739785397 1380740303830 1380739849591
12d1be8adb90a88b 1375541238666 1375541281821
12d29ba61341e7ce 1377855844089 1377855785342
12d2e28e50d42d19 1381974506104 1381973579872 1377988785664 1381976074258
如何处理制表符分隔的数据,以便第一个字段与其余选项卡分隔,其他所有字符以逗号分隔并由[]包围。可能每个以逗号分隔的项目也必须加入“”。
我需要将这些数据读入Hive表
CREATE TABLE id_timestamps (id STRING, timestamps array<STRING>);
我是否可以通过一些技巧或shell将其直接读取到Hive我用awk或sed转换制表符分隔的数据?请帮助提供一些建议和食谱。
谢谢!
答案 0 :(得分:1)
这个awk脚本产生了所需的格式:
awk '{printf "%s\t[", $1; for(i=2;i<=NF;++i) printf "%s%s", $i, (i<NF?",":"]\n")}' file
打印第一列,然后是制表符和开头“[”。打印其余列,后跟一个“,”,除了最后一个,后面跟一个“]”和换行符。
测试出来:
$ awk '{printf "%s\t[", $1; for(i=2;i<=NF;++i) printf "%s%s", $i, (i<NF?",":"]\n")}' file
12cef8e1b711a351 [1377045694501,377045728475,1377045709652]
12cf3cb988f10a87 [1380741459591,1380739871201,1380739785397,1380740303830,1380739849591]
12d1be8adb90a88b [1375541238666,1375541281821]
12d29ba61341e7ce [1377855844089,1377855785342]
12d2e28e50d42d19 [1381974506104,1381973579872,1377988785664,1381976074258]