- 论坛徽章:
- 0
|
本帖最后由 木万万 于 2012-02-17 11:45 编辑
我想提取数据库的一张表的6个特定列,现大小已为21G。因为导出的文本文件每条记录当中也有某些是存在换行的,这个要实现的时候我用了复合命令”;“。然后用管道再用awk提取目的列。但命令敲出后,内存消耗飙升,最后不得不停掉。我是想问,是不是第一步我去掉换行(去掉意外换行后仍有八千多万条记录)的时候就已经破坏sed的管道操作,有没有好的建议。
机器系统是centOS,当然我本地的win7也安装了Cygwin Terminal,数据库是mysql(不过这个应该没有关系了)。
我在下面说了的,现在我把具体情况再说一下。。
首先,目的是提取这张21G大的表 properties 当中的第$1,$2,$3,$28,$29,$30,$31列。
命令如下,敬请高手指教:- sed -e ':a;N;$ s/\\\n//g;ba' properties.txt|sed 's/\\N/\\N"/g' | awk -F '",' '{print$1,$2,$3,$28,$29,$30,$31}'|sed 's/"//g' >pro.txt
复制代码 以下是表中两条原始记录:
- "1","527","1830",\N,"时代豪苑200万好楼层好位置低价位","\
- \
- <h2>户型图</h2>\
- \
- \
- \
- <h2>室内图</h2>\
- \
- \
- \
- \
- \
- \
- \
- 此房位于解放碑CBD中心的甲级写字楼,位置好,出入方便的黄金地段(在美美百货楼上),里面为办公装修,户型方正采光好,视野开阔,可拿来自用办公,也可出租,均让你得到意想不到
- 的高回报。交通非常便利,旁边就是轻轨车站!","200","11765",\N,"NS",\N,"1",\N,\N,\N,\N,"20","43",\N,\N,\N,"Rejected",\N,"91","4416721124132318","2011-11-23 09:52:24","2011-11-23 09:52:24","1","1","1","170.00","Error"
- "2","528","1831",\N,"中山公园附近,乐购旁边这么便宜的房子哪里找","\
- \
- <h2>室内图</h2>\
- \
- \
- \
- \
- \
- \
- \
- 房屋介绍:这个房子原来是一室一厅的户型,房东之前自住,把中间的隔墙打通了,变成一室的户型了。房子朝正南,采光和阳光非常好,从早晒到晚。进门是厨房,向前走左转是卫生,再向前就是房间。前面还有一个阳台3.4个平米。从房子走路到武夷路的体操中心乐购只需要1分钟。非常非常的便捷。小区介绍:地段成熟,位于玉屏南路中山西路,靠武夷乐购、天山茶城等,交通便捷,地铁2、3、4号线中山公园站和2号线娄山关路站及3、4号线延安西路站,还有大量公交线路及高架线路供你出行选择。","74.7","23307",\N,"S",\N,"3",\N,\N,\N,\N,"6","6",\N,\N,\N,"Approved",\N,"91","4591919082716853","2011-11-23 09:52:24","2011-11-23 09:52:24","1","1","1","32.05","High"
复制代码 说下问题所在:
问题1:第6列当中存在不确定个规则换行即 \ + 回车 (因为规范记录应该是每条记录到换行结束的)。我的第一步就是要去掉这些规则换行- sed -e ':a;N;$ s/\\\n//g;ba'
复制代码 问题2:我要用awk提取当中的目的列,但是每条记录间没有特定的分隔符,其实是\N在作影响,而且中间的文字当中可能含有英文的”,“。所以我把\N 替换成了 \N"为的是能出现‘”,’这种特定的分隔符,然后按照awk分割- awk -F '",' '{print$1,$2,$3,$28,$29,$30,$31}'
复制代码 。但结果当中是还会保留有一个英文的“。所以利用,将"去掉。
想来大致便是这样,本人资质尚浅,原来做的都和这些不搭嘎的,有拙劣之处,还望不要见笑呀。。
|
|