免费注册 查看新帖 |

Chinaunix

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

[文本处理] 非常捉急,求AWK的一个实现,想破头都没想出来怎么实现。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-11 21:53 |只看该作者 |倒序浏览
本帖最后由 beacon1024 于 2013-11-11 22:27 编辑

# Hostname: BANCS01HADRDB
# Date: Mon May 27 12:36:01 CST 2013
# Uptime: 12:36PM   up 25 days,  12:25,  2 users
# Hostname: PIPRDAP1
# RunDate: Thu Aug 29 15:58:36 CST 2013
# Uptime: 03:58:49   up 4 days,  16:51:20,  1 user
# Hostname: localhost
# RunDate: Thu Aug 29 15:57:58 CST 2013
# Uptime: 03:57PM   up 7 days,  22:33,  1 user
# Hostname: BANCS02APP
# Date: Thu May 16 18:09:31 CST 2013
# Uptime: 06:09PM   up 14 days,  18:01,  1 user
# Hostname: BANCS02XSAPP
# Date: Thu May 16 18:40:46 CST 2013
# Uptime: 06:40PM   up 14 days,  18:30,  1 user

我有这些输出,现在想把第一个冒号“:”左边的所有文本都向左对齐,站位10个字符,其他全部向右对齐,类似如下:


# Hostname:      BANCS01HADRDB
# Date:             Mon May 27 12:36:01 CST 2013
# Uptime:          12:36PM   up 25 days,  12:25,  2 users
# Hostname:      PIPRDAP1
# RunDate:       Thu Aug 29 15:58:36 CST 2013
# Uptime:          03
# Hostname:     localhost
# RunDate:      Thu Aug 29 15:57:58 CST 2013
# Uptime:         03:57PM   up 7 days,  22:33,  1 user
# Hostname:    BANCS02APP
# Date:            Thu May 16 18:09:31 CST 2013
# Uptime:         06:09PM   up 14 days,  18:01,  1 user
# Hostname:     BANCS02XSAPP
# Date:            Thu May 16 18:40:46 CST 2013
# Uptime:         06:40PM   up 14 days,  18:30,  1 user

但是我用awk这样实现
awk -F: '/^#/&&NF==4{printf "%-13s%s%s%s\n",$1":",$2,":"$3,":"$4;next}
                                 /^#/&&NF==1{printf "%-13s%s\n",$1,$2;next}
                                /^#/{printf "%-13s%s\n",$1":",$2;next}{print "  "$0}'
但是发现如果冒号数量不一样,会出现异常,比如第六行就不对了。


简单来说就是,不管有多少个冒号“:”,用”:“做分隔符,第一个字段左对齐,后面全部右对齐!

# Uptime: 03:58:49   up 4 days,  16:51:20,  1 user


怎么实现啊?各位指教,在线等!

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
2 [报告]
发表于 2013-11-11 22:32 |只看该作者
本帖最后由 关阴月飞 于 2013-11-11 22:33 编辑

回复 1# beacon1024


右对齐是什么概念?
是这样么?
  1. aa:      12222
  2. bbb:      2222
  3. cccc:      222
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2013-11-11 22:37 |只看该作者
回复 1# beacon1024


    awk -F":[\t ]+" '{printf "%-13s%s\n",$1,$2}'

论坛徽章:
0
4
发表于 2013-11-11 22:44
是的回复 2# 关阴月飞


   

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
5
发表于 2013-11-11 22:47
回复 1# beacon1024


    awk -F: '{printf "%-13s", $1":"; for(i=2; i<=NF; ++i)printf $i; print ""}'  file

这样符合你的要求吗

论坛徽章:
0
6
发表于 2013-11-11 22:48
回复 3# yinyuemi


    谢谢您的回复!真的可以啊,不过没看懂。。。
     
awk -F":[\t ]+" '{printf "%-13s%s\n",$1,$2}'

这个[\t]是tab吗,但是我的文本是空格啊,没有tab。

论坛徽章:
0
7
发表于 2013-11-11 22:49
回复 5# elu_ligao


    这个不行,冒号分隔符都没有了


# Hostname:   BANCS01HADRDB
# Date:       Mon May 27 123601 CST 2013
# Uptime:     1236PM   up 25 days,  1225,  2 users
# Hostname:   PIPRDAP1
# RunDate:    Thu Aug 29 155836 CST 2013
# Uptime:     035849   up 4 days,  165120,  1 user
# Hostname:   localhost
# RunDate:    Thu Aug 29 155758 CST 2013
# Uptime:     0357PM   up 7 days,  2233,  1 user
# Hostname:   BANCS02APP
# Date:       Thu May 16 180931 CST 2013
# Uptime:     0609PM   up 14 days,  1801,  1 user
# Hostname:   BANCS02XSAPP
# Date:       Thu May 16 184046 CST 2013
# Uptime:     0640PM   up 14 days,  1830,  1 user

论坛徽章:
0
8 [报告]
发表于 2013-11-11 22:52 |只看该作者
回复 3# yinyuemi


    有点明白了,没注意后面还有一个空格。但是为什么这样定义FS后,就只有$1 $2 了呢?

论坛徽章:
29
程序设计版块每日发帖之星
日期:2016-02-29 06:20:0015-16赛季CBA联赛之天津
日期:2016-08-10 10:33:1115-16赛季CBA联赛之深圳
日期:2016-08-17 15:07:2015-16赛季CBA联赛之佛山
日期:2016-11-07 11:33:5015-16赛季CBA联赛之广夏
日期:2016-11-15 09:13:31CU十四周年纪念徽章
日期:2016-11-24 14:12:25极客徽章
日期:2016-12-07 14:03:4015-16赛季CBA联赛之深圳
日期:2016-12-07 17:15:2715-16赛季CBA联赛之北京
日期:2016-12-22 09:30:0115-16赛季CBA联赛之深圳
日期:2016-12-22 10:49:2115-16赛季CBA联赛之山西
日期:2017-02-10 09:05:3215-16赛季CBA联赛之同曦
日期:2017-02-27 14:19:08
9 [报告]
发表于 2013-11-11 22:55 |只看该作者
回复 8# beacon1024


    3楼的可以解决了

awk -F ":[ ]+" '{printf "%-13s%s\n", $1":", $2}'  file

论坛徽章:
39
辰龙
日期:2013-08-21 15:45:192015亚冠之广州富力
日期:2015-05-12 16:34:52亥猪
日期:2015-03-03 17:22:00申猴
日期:2015-03-03 17:21:37未羊
日期:2014-10-10 13:45:41戌狗
日期:2014-06-17 09:53:29巨蟹座
日期:2014-06-12 23:17:17双鱼座
日期:2014-06-10 12:42:44寅虎
日期:2014-06-09 12:52:172015亚冠之卡尔希纳萨夫
日期:2015-05-24 15:24:35黄金圣斗士
日期:2015-12-02 17:25:0815-16赛季CBA联赛之吉林
日期:2017-06-24 16:43:52
10 [报告]
发表于 2013-11-11 22:56 |只看该作者
本帖最后由 关阴月飞 于 2013-11-11 23:00 编辑

回复 4# beacon1024

你要的右对齐:很奇葩:
  1. [root@test]# awk -F': ' '{printf "%-13s%+40s\n",$1FS,$2}'  file
  2. # Hostname:                             BANCS01HADRDB
  3. # Date:                  Mon May 27 12:36:01 CST 2013
  4. # Uptime:      12:36PM   up 25 days,  12:25,  2 users
  5. # Hostname:                                  PIPRDAP1
  6. # RunDate:               Thu Aug 29 15:58:36 CST 2013
  7. # Uptime:    03:58:49   up 4 days,  16:51:20,  1 user
  8. # Hostname:                                 localhost
  9. # RunDate:               Thu Aug 29 15:57:58 CST 2013
  10. # Uptime:        03:57PM   up 7 days,  22:33,  1 user
  11. # Hostname:                                BANCS02APP
  12. # Date:                  Thu May 16 18:09:31 CST 2013
  13. # Uptime:       06:09PM   up 14 days,  18:01,  1 user
  14. # Hostname:                              BANCS02XSAPP
  15. # Date:                  Thu May 16 18:40:46 CST 2013
  16. # Uptime:       06:40PM   up 14 days,  18:30,  1 user
  17. [root@test]# cat file
  18. # Hostname: BANCS01HADRDB
  19. # Date: Mon May 27 12:36:01 CST 2013
  20. # Uptime: 12:36PM   up 25 days,  12:25,  2 users
  21. # Hostname: PIPRDAP1
  22. # RunDate: Thu Aug 29 15:58:36 CST 2013
  23. # Uptime: 03:58:49   up 4 days,  16:51:20,  1 user
  24. # Hostname: localhost
  25. # RunDate: Thu Aug 29 15:57:58 CST 2013
  26. # Uptime: 03:57PM   up 7 days,  22:33,  1 user
  27. # Hostname: BANCS02APP
  28. # Date: Thu May 16 18:09:31 CST 2013
  29. # Uptime: 06:09PM   up 14 days,  18:01,  1 user
  30. # Hostname: BANCS02XSAPP
  31. # Date: Thu May 16 18:40:46 CST 2013
  32. # Uptime: 06:40PM   up 14 days,  18:30,  1 user
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP