免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed对数据从右到左隔三位来一个, [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-01-15 11:12 |只看该作者 |倒序浏览
echo 12345678.12|sed ****

期望达到效果:

12,345,678.12

论坛徽章:
54
2015亚冠之德黑兰石油
日期:2015-07-07 13:00:1615-16赛季CBA联赛之深圳
日期:2016-03-31 09:03:5415-16赛季CBA联赛之辽宁
日期:2016-05-09 20:38:15程序设计版块每日发帖之星
日期:2016-05-12 06:20:0015-16赛季CBA联赛之四川
日期:2016-05-13 15:19:4715-16赛季CBA联赛之福建
日期:2016-05-15 20:24:34每日论坛发贴之星
日期:2016-05-16 06:20:0015-16赛季CBA联赛之吉林
日期:2016-05-26 11:49:4715-16赛季CBA联赛之广东
日期:2016-05-26 13:49:18极客徽章
日期:2016-12-07 14:05:2315-16赛季CBA联赛之广夏
日期:2016-12-20 17:33:532017金鸡报晓
日期:2017-01-10 15:19:56
2 [报告]
发表于 2016-01-15 11:27 |只看该作者
  1. sed -r ':a;s/([0-9]+)([0-9]{3}[.,])/\1,\2/;ta'
复制代码

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
3 [报告]
发表于 2016-01-15 13:26 |只看该作者
  1. awk -F '' '{match($0,/(\..*)$/,a);n=length(a[1]);for(i=NF-n;i>3;){i-=3;$i=$i","}}1' OFS=""
复制代码

论坛徽章:
20
卯兔
日期:2015-01-26 22:05:142015亚冠之萨济拖拉机
日期:2015-09-10 15:15:282015亚冠之阿尔希拉尔
日期:2015-09-25 17:37:53程序设计版块每日发帖之星
日期:2015-10-03 06:20:00程序设计版块每日发帖之星
日期:2015-12-09 06:20:00CU十四周年纪念徽章
日期:2015-12-17 09:07:15程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:34程序设计版块每日发帖之星
日期:2015-12-25 06:20:342015亚冠之广州富力
日期:2015-08-27 19:29:56每日论坛发贴之星
日期:2015-08-26 06:20:002015亚冠之阿尔希拉尔
日期:2015-05-18 17:26:27
4 [报告]
发表于 2016-01-15 13:33 |只看该作者
本帖最后由 songyc_2015 于 2016-01-15 13:38 编辑

回复 2# haooooaaa
如果是整数不能进行千分位分割,建议多加一个?号:
  1. sed -r ':a;s/([0-9]+)([0-9]{3}[,.]?)/\1,\2/;ta'
复制代码

评分

参与人数 1信誉积分 +5 收起 理由
haooooaaa + 5 赞一个!

查看全部评分

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
5 [报告]
发表于 2016-01-15 16:02 |只看该作者
([0-9]+)([0-9]{3}[,.]?)  这里面的逗号不加也没问题呐,为什么要加个逗号
  1. [root@local ~]# echo 8123456723458.4 | sed -r ':t;s/([0-9]+)([0-9]{3}[.]?)/\1,\2/g;tt'
  2. 8,123,456,723,458.4
复制代码
回复 4# songyc_2015


   

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
6 [报告]
发表于 2016-01-15 16:34 |只看该作者
本帖最后由 陈卓文 于 2016-01-15 16:37 编辑

linux:~ # echo 1234567.22 | sed -r ':a;s/([0-9]+)([0-9]{3}[.,])/\1,\2/;ta'
1,234,567.22
linux:~ # echo 1234567.22 | sed -r ':a;s/([0-9]+)([0-9]{3}[.])/\1,\2/;ta'
1234,567.22

加了问号就不须逗号了吧
回复 5# baby_神


   

论坛徽章:
12
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
7 [报告]
发表于 2016-01-15 16:35 |只看该作者
回复 5# baby_神


    [.]?都可以不要

论坛徽章:
1
技术图书徽章
日期:2016-02-03 16:35:25
8 [报告]
发表于 2016-01-15 16:36 |只看该作者
linux:~ # echo 1234567.22 | sed -r ':a;s/([0-9]+)([0-9]{3}[.,])/\1,\2/;ta'
1,234,567.22
linux:~ # echo 1234567.22 | sed -r ':a;s/([0-9]+)([0-9]{3}[.])/\1,\2/;ta'
1234,567.22

逗号用于循环时再匹配啊已处理\1,\2的逗号啊
回复 5# baby_神


   

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-10-11 06:20:0015-16赛季CBA联赛之山东
日期:2016-05-28 18:18:5615-16赛季CBA联赛之新疆
日期:2017-04-12 22:55:4715-16赛季CBA联赛之青岛
日期:2017-06-26 18:30:0315-16赛季CBA联赛之四川
日期:2017-09-04 12:27:0315-16赛季CBA联赛之福建
日期:2018-02-09 14:28:3315-16赛季CBA联赛之同曦
日期:2018-04-17 12:43:3415-16赛季CBA联赛之浙江
日期:2018-07-14 13:27:4015-16赛季CBA联赛之吉林
日期:2018-09-13 15:48:2915-16赛季CBA联赛之新疆
日期:2016-05-07 05:05:3215-16赛季CBA联赛之八一
日期:2016-03-14 12:32:06程序设计版块每日发帖之星
日期:2015-12-12 06:20:00
9 [报告]
发表于 2016-01-15 16:39 |只看该作者
本帖最后由 baby_神 于 2016-01-15 16:41 编辑
  1. [root@local ~]# echo 1234567.22 | sed -r ':a;s/([0-9]+)([0-9]{3}[.])/\1,\2/;ta'
  2. 1234,567.22
  3. [root@local ~]# echo 1234567.22 | sed -r ':a;s/([0-9]+)([0-9]{3}[.]?)/\1,\2/;ta'
  4. 1,234,567.22
复制代码
不用加,加个?就可以了

回复 8# 陈卓文


   

论坛徽章:
12
IT运维版块每日发帖之星
日期:2015-11-17 06:20:00程序设计版块每日发帖之星
日期:2016-01-19 06:20:0015-16赛季CBA联赛之江苏
日期:2016-01-17 15:31:3915-16赛季CBA联赛之上海
日期:2016-01-16 15:44:3015-16赛季CBA联赛之浙江
日期:2016-01-15 20:38:1815-16赛季CBA联赛之北京
日期:2016-01-09 14:30:15CU十四周年纪念徽章
日期:2016-01-07 12:31:5115-16赛季CBA联赛之四川
日期:2016-01-01 11:49:1515-16赛季CBA联赛之深圳
日期:2015-12-24 14:23:4115-16赛季CBA联赛之山西
日期:2015-12-15 16:22:31技术图书徽章
日期:2015-12-10 17:41:0015-16赛季CBA联赛之北控
日期:2016-02-03 10:03:24
10 [报告]
发表于 2016-01-15 17:25 |只看该作者
回复 4# songyc_2015

小数点后超过3位就处理不了了
echo 12345678.12345|sed -r ':a;s/([0-9]+)([0-9]{3}[,.]?)/\1,\2/;ta'
12,345,678.12,345
echo 12345678.12345|sed -r ':a;s/([0-9]+)([0-9]{3})/\1,\2/;ta'
12,345,678.12,345

这种可以处理小数点后超过3位的情况,但是不能处理整数
echo 12345678.12345|sed -r ':a;s/([0-9]+)([0-9]{3}[,.])/\1,\2/;ta'
12,345,678.12345
echo 12345678|sed -r ':a;s/([0-9]+)([0-9]{3}[,.])/\1,\2/;ta'
12345678

有个完美sed版的么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP