免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: hfvbc
打印 上一主题 下一主题

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

论坛徽章:
0
11 [报告]
发表于 2011-08-10 21:25 |只看该作者
回复 10# hfvbc
  1. [root@M2_lion_S10_115.238.72.66_61618_A dir]# a='###'
  2. [root@M2_lion_S10_115.238.72.66_61618_A dir]# sed -r 's/([^",][^",]+)",([^",][^",]+)/\1-ab-\2/g;s/([^",][^",]+),"([^",][^",]+)/\1-ba-\2/g;s/([^,][^,]+),([^,][^,]+)/\1-b-\2/g;s/","|",|,"|,/'"$a"'/g;s/-ab-/",/g;s/-ba-/,"/g;s/-b-/,/g' file1
  3. 1###nihao,shia,"shi###hiscihe###3###8
  4. 1###nihao,shma",shi###hiscihe###3###8
  5. [root@M2_lion_S10_115.238.72.66_61618_A dir]#
复制代码

论坛徽章:
0
12 [报告]
发表于 2011-08-10 21:30 |只看该作者
回复 11# lionfun


呵呵,为什么我的就爱出问题呢?

[admin@dbs test]$ a='#&'
[admin@dbs test]$ sed -r 's/([^",][^",]+)",([^",][^",]+)/\1-ab-\2/g;s/([^",][^",]+),"([^",][^",]+)/\1-ba-\2/g;s/([^,][^,]+),([^,][^,]+)/\1-b-\2/g;s/","|",|,"|,/'"$a"'/g;s/-ab-/",/g;s/-ba-/,"/g;s/-b-/,/g' a
1#,"nihao,shia,"shi#","hiscihe#",3#,8
1#,"nihao,shma",shi#","hiscihe#",3#,8
[admin@dbs test]$ echo $a
#&
[admin@dbs test]$

论坛徽章:
0
13 [报告]
发表于 2011-08-10 22:31 |只看该作者
求大牛支持!

论坛徽章:
0
14 [报告]
发表于 2011-08-10 22:46 |只看该作者
求大牛挑战awk!

论坛徽章:
0
15 [报告]
发表于 2011-08-10 22:55 |只看该作者
回复 12# hfvbc
  1. 要加反斜杆转义的 a='#\&'
复制代码

论坛徽章:
0
16 [报告]
发表于 2011-08-10 22:56 |只看该作者
回复  lionfun


呵呵,为什么我的就爱出问题呢?

[admin@dbs test]$ a='#&'
[admin@dbs test]$ sed ...
hfvbc 发表于 2011-08-10 21:30



    &在sed中表示前一次的匹配内容,你要当元字符使用,就必须转移……

论坛徽章:
0
17 [报告]
发表于 2011-08-10 23:11 |只看该作者
那还有没有其他的在sed中需要转义的字符呢?

论坛徽章:
0
18 [报告]
发表于 2011-08-11 00:12 |只看该作者
本帖最后由 ywlscpl 于 2011-08-11 00:17 编辑

回复 1# hfvbc
cat a.txt
1,"nihao,shia,"shi","hiscihe",3,8
1,"nihao,shma",shi","hiscihe",3,8

以楼主的标准,字符串型字段中是允许存在,或者"的,并且个数可能也没有限制。

那么假设有一行记录,字段分别为
数字:1
字符串:nihao,shia,"shi","hiscihe
数字:3
数字:8

那么其以del格式导出后(逗号分隔),应该跟你提供的例子中第一行是一样的内容
1,"nihao,shia,"shi","hiscihe",3,8
而对这条记录的分割,楼主的要求是:
数字:1
字符串:nihao,shia,"shi
字符串:hiscihe
数字:3
数字:8

所以说,还缺少一些分割标准,以达到对一条记录分割后结果的唯一性。
比如每条记录的字段总数,字符串型字段包含字符的限制性(如只允许有一个")....

论坛徽章:
0
19 [报告]
发表于 2011-08-11 00:19 |只看该作者
如果我提供了一个参数b,表示的是字段数,那么程序应该怎么写呢?

论坛徽章:
0
20 [报告]
发表于 2011-08-11 00:25 |只看该作者
本帖最后由 ywlscpl 于 2011-08-11 00:28 编辑

单单一个字段总数并不能保证分割的唯一性

一条记录,假设对某一区块a的分割有2种可能,一种分成2个字段,一种分成3个字段
那么也可能存在对某一区块b的分割有2种可能,一种分成2个字段,一种分成3个字段

那么对a块分成2字段,b块分成3字段

对b块分成3字段,b块分成2字段

就是两种可能性了,并且其字段总数是相同的

总之,不对字符串型字段内"和,这两个字符给定一个标准的话,达不到分割的唯一性
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP