免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hfvbc

awk问题求助[高人现身呀][db2 csv格式的数据转定分割符的数据] [复制链接]

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2011-08-11 10:44 |显示全部楼层
是否可以换个思路:
1,以逗号为分割符,
2,如果类型是char等的,就必须以”开始,以“结束。
3,如果类 ...
hfvbc 发表于 2011-08-11 10:40



    举个例吧!!!

29楼..应可达到要求...

论坛徽章:
0
发表于 2011-08-11 10:51 |显示全部楼层
回复 31# jason680


    您的例子不错,但是你用的是perl,shell,perl混合使用,可能会影响程序的健壮性。另外,分割符您没有使用变量,在实际的过程中,分割符是由用户自己输入的呢。还有,就是如果数据变了,怎么样确定分割的唯一性问题,前面如楼上前面几位所说的。

呵呵,可能我没有把需求说清楚,不好意思啊。您功底很强。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2011-08-11 11:01 |显示全部楼层
回复  jason680


    您的例子不错,但是你用的是perl,shell,perl混合使用,可能会影响程序的健壮性。 ...
hfvbc 发表于 2011-08-11 10:51



>>    6,代码最好可以在aix,hp-unix,redhat等linux上运行。

如果你不认为perl -e '{...}' 为shell command
我想第六点,一般的shell script都达不到....去写个C吧!!!
不要再"缘木求鱼"了...

论坛徽章:
0
发表于 2011-08-11 11:08 |显示全部楼层
回复 33# jason680


    呵呵,其实只要能实现我要的功能我就满足了,比如说可在多平台上运行,这只是如果满足了,那再好不过的了。

   我现在用的是bash,而perl我好象没见人在shell命令里用过,所以是我少见多怪了。

论坛徽章:
0
发表于 2011-08-11 12:10 |显示全部楼层
大牛现身呀,帖子不要沉了呀。
其实这个需求是很常见的呢,db2 del导出的数据转换成定分割符的数据。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2011-08-11 12:16 |显示全部楼层
求人不如求己...

论坛徽章:
0
发表于 2011-08-11 14:04 |显示全部楼层
高人在哪呢?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2011-08-11 14:14 |显示全部楼层
本帖最后由 jason680 于 2011-08-11 14:16 编辑
高人在哪呢?
hfvbc 发表于 2011-08-11 14:04


不完善,还能行....
$ echo '1,"nihao,shia,"shi","hiscihe",3,8
1,"nihao,sh ma",shi","hiscihe",3,8' | awk -v K='^|^' -v D="," 'function Err(e){print e" <--Error";next}{L=length($0);s=0;for(n=0;n++<L{w=substr($0,n,1);if(s==0){if(w~/[0-9]/){printf w;s=1}else if(w=="\""{s=2}else Err(w)}else if(s==1){if(w~/[0-9]/){printf w}else if(w==D){s=0;printf K}else Err(w)}else if(s==2){if(w=="\""&&substr($0,n+1,1)==D){x=substr($0,n+2,1);if(x~/[0-9]/){s=0;printf K;n++}else if(x=="\""{printf K;n+=2}else printf w}else printf w}}print ""}'
1^|^nihao,shia,"shi^|^hiscihe^|^3^|^8
1^|^nihao,sh ma",shi^|^hiscihe^|^3^|^8

不完善,还能行....

说明:
  s=0, for initial or new item
  s=1, for number
  s=2, for "string"

  1. 1,"nihao,shia,"shi","hiscihe",3,8
  2. 102222222222222222202222222220101 <--- s
  3. 1,"nihao,sh ma",shi","hiscihe",3,8
  4. 1022222222222222222202222222220101    <--- s
复制代码

论坛徽章:
0
发表于 2011-08-11 16:01 |显示全部楼层
回复 1# hfvbc


    楼主给出的从db2中导出数据,字符类型,双引号为啥不匹配呢?

论坛徽章:
0
发表于 2011-08-11 16:31 |显示全部楼层
回复 38# jason680


    您的代码写的非常好,非常感谢。我在开始也借鉴了您的代码。

   但是同时您按字符扫描,数据文件很大的话,效率可能有点慢。数据复杂的话,您的 if(s==2)这一部分可能还待完善。

谢谢您的不懈支持啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP