字符串分割

yyang0514 2013-07-14 09:21:23
如果数据源变为 123455,13182122252601时,我只对第二个域进行分割,请问如何实现。
期望结果是123455,13,18,21,22,25,26,01。
文件中有很多同类型的数据需要分割。
...全文
90 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
yyang0514 2013-07-15
引用 3 楼 justkk 的回复:
第二个域的长度固定吗?
第二个域长度是固定的
回复
justkk 2013-07-15
第二个域的长度固定吗?
回复
yyang0514 2013-07-15
引用 1 楼 u011081622 的回复:
char* pText = "123455,13182122252601"; int iCount = 0; bool fSecond = false; for (int i=0; i<strlen(pText); ++i) { printf("%c", pText[i]); if (',' == pText[i])//找到两域之间的分割 { fSecond = true; } if (fSecond) { if (++iCount % 2 == 0) { printf(","); } } }
谢谢你的回复,请问shell命令能实现吗
回复
kenny_hwei 2013-07-15
char* pText = "123455,13182122252601"; int iCount = 0; bool fSecond = false; for (int i=0; i<strlen(pText); ++i) { printf("%c", pText[i]); if (',' == pText[i])//找到两域之间的分割 { fSecond = true; } if (fSecond) { if (++iCount % 2 == 0) { printf(","); } } }
回复
yyang0514 2013-07-15
引用 8 楼 justkk 的回复:
cat yourfile|sed 's/\(.*,\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1\2,\3,\4,\5,\6,\7,\8/'
非常感谢你的帮助问题已经解决了。
回复
justkk 2013-07-15
cat yourfile|sed 's/\(.*,\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1\2,\3,\4,\5,\6,\7,\8/'
回复
justkk 2013-07-15
哦,他那个方式更简洁,学习了

全部处理
cat yourfile|sed -r 's/(.{2})/\1,/g'|sed '$s/.$//
回复
yyang0514 2013-07-15
引用 5 楼 justkk 的回复:
试试
echo "123455,13182122252601"|sed 's/\(.*,\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1\2,\3,\4,\5,\6,\7,\8/'
引用 5 楼 justkk 的回复:
试试
echo "123455,13182122252601"|sed 's/\(.*,\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1\2,\3,\4,\5,\6,\7,\8/'
下面的脚本和你的类似,工作没有问题。我遇到的问题是我有很多记录,但是只对第二个域进行处理,如何将所有记录全部都处理好呢。例如: 123455,13182122252601 333333,13182122252601 转换为文本 123455,13,18,21,22,25,26,01 333333,13,18,21,22,25,26,01

echo "13182122252601"|sed -r 's/(.{2})/\1,/g'|sed '$s/.$//
回复
justkk 2013-07-15
试试
echo "123455,13182122252601"|sed 's/\(.*,\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)\(..\)/\1\2,\3,\4,\5,\6,\7,\8/'
回复
相关推荐
发帖
系统维护与使用区
创建于2007-08-27

1.9w+

社区成员

系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
申请成为版主
帖子事件
创建了帖子
2013-07-14 09:21
社区公告
暂无公告