免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教awk过滤行中空格或\t [复制链接]

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
发表于 2016-03-08 22:33 |显示全部楼层
本帖最后由 ccjsj1 于 2016-03-08 22:35 编辑

如下:将每3行按一行输出,做下对齐,但第6行和第9行是以空格或\t开头,用gsub过滤不掉--!
  1. neo@asterisk:/tmp$ cat 3.log
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7.         30
  8. SESSION_CURCOUNT
  9. ----------------
  10.         463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13. 10000

  14. neo@asterisk:/tmp$ cat -A 3.log
  15. STATUS$
  16. ------------$
  17. OPEN$
  18. SESSION_ACTIVE$
  19. --------------$
  20. ^I30$
  21. SESSION_CURCOUNT$
  22. ----------------$
  23. ^I463$
  24. PROCESSES_ALLCOUNT$
  25. ------------------$
  26. 10000$

  27. neo@asterisk:/tmp$ cat 3.log | awk '{if($0~"STATUS") a=1; if(a!=3) {gsub(/\t/,""); printf("%-20s",$0); a++ } else {print $0; a=1}}'
  28. STATUS              ------------        OPEN
  29. SESSION_ACTIVE      --------------              30
  30. SESSION_CURCOUNT    ----------------            463
  31. PROCESSES_ALLCOUNT  ------------------  10000

  32. neo@asterisk:/tmp$ cat 3.log | awk '{if($0~"STATUS") a=1; if(a!=3) {gsub(/^ */,""); printf("%-20s",$0); a++ } else {print $0; a=1}}'
  33. STATUS              ------------        OPEN
  34. SESSION_ACTIVE      --------------              30
  35. SESSION_CURCOUNT    ----------------            463
  36. PROCESSES_ALLCOUNT  ------------------  10000

  37. neo@asterisk:/tmp$ cat 3.log | awk '{if($0~"STATUS") a=1; if(a!=3) {gsub(/^ */,""); printf("%-20s",$0); a++ } else {print $0; a=1}}' | cat -A
  38. STATUS              ------------        OPEN$
  39. SESSION_ACTIVE      --------------      ^I30$
  40. SESSION_CURCOUNT    ----------------    ^I463$
  41. PROCESSES_ALLCOUNT  ------------------  10000$
复制代码

论坛徽章:
481
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2016-03-08 23:18 |显示全部楼层
回复 1# ccjsj1

  1. cat 3.log|xargs -n 3|column -t
  2. STATUS              ------------        OPEN
  3. SESSION_ACTIVE      --------------      30
  4. SESSION_CURCOUNT    ----------------    463
  5. PROCESSES_ALLCOUNT  ------------------  10000
复制代码

评分

参与人数 1可用积分 +3 收起 理由
ccjsj1 + 3 赞一个!

查看全部评分

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
发表于 2016-03-09 08:54 |显示全部楼层
回复 2# Herowinter

感谢这末快的回复!结果也是期望的 !还是想用awk来实现,不知有什末办法没有?谢谢!

   

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
发表于 2016-03-09 09:35 |显示全部楼层
  1. sed -e 's/^\s*//;N;N;s/\n/ /g' file |column -t
  2. STATUS              ------------        OPEN
  3. SESSION_ACTIVE      --------------      30
  4. SESSION_CURCOUNT    ----------------    463
  5. PROCESSES_ALLCOUNT  ------------------  10000
复制代码

评分

参与人数 1可用积分 +2 收起 理由
ccjsj1 + 2 赞一个!

查看全部评分

论坛徽章:
30
申猴
日期:2014-04-10 09:43:532015年亚洲杯纪念徽章
日期:2015-03-20 14:40:232015亚冠之阿尔纳斯尔
日期:2015-06-02 18:59:042015亚冠之阿尔希拉尔
日期:2015-06-30 15:22:572015亚冠之大阪钢巴
日期:2015-07-20 10:44:332015亚冠之阿尔纳斯尔
日期:2015-10-28 14:57:5215-16赛季CBA联赛之新疆
日期:2015-12-25 10:18:45黑曼巴
日期:2016-06-26 21:39:5315-16赛季CBA联赛之山西
日期:2016-07-25 21:54:2715-16赛季CBA联赛之北京
日期:2016-10-27 12:07:2315-16赛季CBA联赛之八一
日期:2017-07-07 16:39:0915-16赛季CBA联赛之吉林
日期:2017-09-04 12:14:43
发表于 2016-03-09 09:43 |显示全部楼层
  1. awk '{if(NR%3==0) {print gensub(" ","","G",$0)} else {printf("%-20s",$0)}}' file
复制代码
回复 1# ccjsj1


   

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
发表于 2016-03-09 10:45 |显示全部楼层
本帖最后由 ccjsj1 于 2016-03-09 10:45 编辑

回复 4# jcdiy0601
谢谢回复!结果是想要的 !sed一直没学明白 想用awk实现

论坛徽章:
481
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2016-03-09 10:45 |显示全部楼层
回复 3# ccjsj1

首先回答你的疑问, 空格 \t不是没有成功替换, 而是你没有让awk对$0重新进行赋值($1=$1).
比较下这两段代码的输出就知道了.

  1. awk '{gsub(/^\s*/,"");print}' test
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7. 30
  8. SESSION_CURCOUNT
  9. ----------------
  10.         463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13.         10000

  14. awk '{gsub(/^\s*/,"");$1=$1;print}' test
  15. STATUS
  16. ------------
  17. OPEN
  18. SESSION_ACTIVE
  19. --------------
  20. 30
  21. SESSION_CURCOUNT
  22. ----------------
  23. 463
  24. PROCESSES_ALLCOUNT
  25. ------------------
  26. 10000
复制代码
用awk结合column -t也可以, 非要拿掉column -t自己去负责对齐吧.

  1. awk '{s=s"\t"$1} NR%3==0{print s;s=""}' test|column -t
  2. STATUS              ------------        OPEN
  3. SESSION_ACTIVE      --------------      30
  4. SESSION_CURCOUNT    ----------------    463
  5. PROCESSES_ALLCOUNT  ------------------  10000
复制代码

论坛徽章:
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
发表于 2016-03-09 10:46 |显示全部楼层
回复 1# ccjsj1
  1. 你那里有点问题, gsub放错地方了
  2. awk '{if($0~"STATUS") a=1; if(a!=3) {printf("%-20s",$0); a++ } else {gsub(/\t/,"");print $0; a=1}}'
复制代码

评分

参与人数 1可用积分 +5 收起 理由
ccjsj1 + 5 赞一个!

查看全部评分

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
发表于 2016-03-09 11:33 |显示全部楼层
回复 5# zxy877298415
试了下还是不行啊
  1. neo@asterisk:~/check_log/awk$ cat 3.log
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7.         30
  8. SESSION_CURCOUNT
  9. ----------------
  10.         463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13. 10000
  14. neo@asterisk:~/check_log/awk$ awk '{if(NR%3==0) {print gensub(" ","","G",$0)} else {printf("%-20s",$0)}}' 3.log
  15. STATUS              ------------        OPEN
  16. SESSION_ACTIVE      --------------              30
  17. SESSION_CURCOUNT    ----------------            463
  18. PROCESSES_ALLCOUNT  ------------------  10000
  19. neo@asterisk:~/check_log/awk$ awk '{if(NR%3==0) {print gensub(" ","","G",$0)} else {printf("%-20s",$0)}}' 3.log | cat -A
  20. STATUS              ------------        OPEN$
  21. SESSION_ACTIVE      --------------      ^I30$
  22. SESSION_CURCOUNT    ----------------    ^I463$
  23. PROCESSES_ALLCOUNT  ------------------  10000$
  24. neo@asterisk:~/check_log/awk$
复制代码

论坛徽章:
17
2015年辞旧岁徽章
日期:2015-03-03 16:54:152017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:19:56JAVA
日期:2016-11-01 13:25:46C
日期:2016-10-25 16:01:4715-16赛季CBA联赛之八一
日期:2016-06-21 23:38:0815-16赛季CBA联赛之山东
日期:2016-05-12 12:49:54IT运维版块每日发帖之星
日期:2016-04-20 06:20:00IT运维版块每日发帖之星
日期:2016-03-22 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13IT运维版块每日发帖之星
日期:2015-08-25 06:20:002015亚冠之德黑兰石油
日期:2015-08-22 22:55:54
发表于 2016-03-09 11:36 |显示全部楼层
本帖最后由 ccjsj1 于 2016-03-09 11:47 编辑

回复 7# Herowinter
你好,非常感谢!

不用重新赋值也是可以的(这是$0的内容已经修改了吧),如下:
  1. neo@asterisk:~/check_log/awk$ awk '{gsub(/^\s*/,"");print $0}' 3.log
  2. STATUS
  3. ------------
  4. OPEN
  5. SESSION_ACTIVE
  6. --------------
  7. 30
  8. SESSION_CURCOUNT
  9. ----------------
  10. 463
  11. PROCESSES_ALLCOUNT
  12. ------------------
  13. 10000
  14. neo@asterisk:~/ch
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

PostgreSQL中国大会,早鸟票抢购!

PostgreSQL中国大会,早鸟票抢购!
2019年11月29~11月30日,由 PostgreSQL中文社区与ITPUB联合主办的第九届《PostgreSQL 中国技术大会》将在北京隆重召开。PostgreSQL 作为功能最强的的开源关系型数据库之一,得到了越来越多企业的推广和运用,也越来越受到广大技术爱好者的欢迎和重视。这将是 PostgreSQL 的又一次交流盛会。




----------------------------------------

点击报名>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP