免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2787 | 回复: 7
打印 上一主题 下一主题

求一个分解字符串的awk正则表达式。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-14 13:46 |只看该作者 |倒序浏览
文件内容(t1.txt):
col1 "col1,col2"
co13,col4

分割条件:
(1)能够按照,分割字符串
(2)如果,在“”里面则不分割;

测试脚本:
awk '{split($0,a,",");print a[1],";",a[2]} ' t1.txt
结果:
col1 "col1 ; col2"
co13 ; col4


符合第一条,但不符合第二条。

希望各位能够帮忙。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-14 14:27 |只看该作者
if($0 ~/".*,.*/) next

论坛徽章:
0
3 [报告]
发表于 2005-11-14 14:37 |只看该作者

对于有多列楼上的有问题啊。

对于有多列的t1.txt还是没有办法:
col1, "col1,col2",col3 ,col4
co13,col4


awk '{split($0,a,",");for(i in a)printf "%s;",a[i];printf "n"} ' t1.txt结果:
col3 ;col4;col1; "col1;col2";
co13;col4;
co13;col4;

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2005-11-14 14:49 |只看该作者
如果文件中没有;包括在""中,考虑反过来替换?

  1. sed 'y/,/;/;s/\("[^"]*\);\([^"]*"\)/\1,\2/g' file
复制代码

论坛徽章:
0
5 [报告]
发表于 2005-11-14 14:55 |只看该作者
Like this?
-----------------------------------------------
$ cat file
col1 "col1,col2"
co13,col4
csiodj,dsad,dsad
dsad,"dsad,dsd"
$ awk -F\" '{print $1}' file |tr "," ";" >1
$ awk -F\" '{print $2}' file >2
$ paste 1 2 | awk '{print $1"\""$2"\""}' |sed 's/\"\"//'
col1"col1,col2"
co13;col4
csiodj;dsad;dsad
dsad;"dsad,dsd"
-----------------------------------------------

[ 本帖最后由 dbcat 于 2005-11-14 14:58 编辑 ]

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
6 [报告]
发表于 2005-11-14 15:08 |只看该作者
  1. sed 'y/,/;/;:a;s/\("[^"]*\);\([^"]*"\)/\1,\2/g;ta' file
复制代码


少了点儿

论坛徽章:
0
7 [报告]
发表于 2005-11-14 15:17 |只看该作者

谢谢,楼上的各位,我只是想用一个split来解决

因为我是想在c++里面使用正则表达式来分析上面类似的语句。
只是使用awk里面的split来验证分割正则表达式是否正确。

这好像是一件很难的事,我查了不少正则表达式方面的资料也没有找到解决办法。

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
8 [报告]
发表于 2005-11-14 15:21 |只看该作者
你不觉得split根本没用到表达式么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP