免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1243 | 回复: 6

[文本处理] 文本处理-列对齐求助 [复制链接]

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-01-22 12:10 |显示全部楼层
大家好!
我有一个问题向大家请教。
我有这样一个文本。
  1. [box@iZ94mso98zxZ:~]$ cat file
  2. 1483263712 1D00H27M:7 wchip nochange:[0] [6/247]
  3. 1485057073 47D13H19M:12 abox nochange:[2/7] [4792/13639]
  4. 1485057076 8D23H33M:2 hbox nochange:[0/5] [2006/2560]
  5. 1485057199 6D02H20M:0 kbox nochange:[2/7] [1724/1724]
  6. 1485057075 1D00H04M:0 mbox nochange:[0/5] [290/290] *
  7. 1485057135 1D00H01M:31 qbox nochange:[0/3] [40/270] *
  8. 1485057080 17D08H34M:0 pbox nochange:[0/5] [4969/4969]
复制代码


希望处理后显示的结果如下所示。
  1. [box@iZ94mso98zxZ:~]$ cat file|awk '{$2=sprintf("%-12s",$2);$3=sprintf("%-5s",$3);$4=sprintf("%-14s",$4);$5=sprintf("%-12s",$5);print$0}'
  2. 1483263712 1D00H27M:7   wchip nochange:[0]   [6/247]
  3. 1485057073 47D13H19M:12 abox  nochange:[2/7] [4792/13639]
  4. 1485057076 8D23H33M:2   hbox  nochange:[0/5] [2006/2560]
  5. 1485057199 6D02H20M:0   kbox  nochange:[2/7] [1724/1724]
  6. 1485057075 1D00H04M:0   mbox  nochange:[0/5] [290/290]    *
  7. 1485057135 1D00H01M:31  qbox  nochange:[0/3] [40/270]     *
  8. 1485057080 17D08H34M:0  pbox  nochange:[0/5] [4969/4969]
  9. [box@iZ94mso98zxZ:~]$
复制代码
Capture.PNG

我用的命令是根据目测每列最大列宽来调整显示的列宽,由于实际数据中的列宽度和样本并不相同,因此希望能自动算出最大列宽,并根据最大列宽来调整显示的列宽。
谢谢大家!

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
发表于 2017-01-22 12:14 |显示全部楼层
column -t urfile

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-01-22 15:16 |显示全部楼层
本帖最后由 bikkuri 于 2017-01-22 15:18 编辑

哎,发帖怎么老出问题!

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-01-22 15:16 |显示全部楼层
回复 1# bikkuri

用这个命令搞定了。
  1. [box@iZ94mso98zxZ:~]$ awk '{j=j+1;for(i=1;i<=NF;i++){l[i]=(length($i)>l[i])?length($i):l[i];b[j,i]=$i}}END{for(k=1;k<=j;k++){for(i=1;i<=length(l);i++)printf("%-"l[i]+1"s",b[k,i]);printf "\n"}}' file
  2. 1483263712 1D00H27M:7   wchip nochange:[0]   [6/247]
  3. 1485057073 47D13H19M:12 abox  nochange:[2/7] [4792/13639]
  4. 1485057076 8D23H33M:2   hbox  nochange:[0/5] [2006/2560]
  5. 1485057199 6D02H20M:0   kbox  nochange:[2/7] [1724/1724]
  6. 1485057075 1D00H04M:0   mbox  nochange:[0/5] [290/290]    *
  7. 1485057135 1D00H01M:31  qbox  nochange:[0/3] [40/270]     *
  8. 1485057080 17D08H34M:0  pbox  nochange:[0/5] [4969/4969]
  9. [box@iZ94mso98zxZ:~]$
复制代码



Capture.PNG

论坛徽章:
1
15-16赛季CBA联赛之江苏
日期:2016-10-26 16:19:04
发表于 2017-01-22 16:27 |显示全部楼层
column -t file

论坛徽章:
18
辰龙
日期:2014-05-21 21:01:4115-16赛季CBA联赛之深圳
日期:2016-12-23 13:51:3815-16赛季CBA联赛之北控
日期:2016-11-28 18:26:3815-16赛季CBA联赛之佛山
日期:2016-11-03 11:18:5815-16赛季CBA联赛之辽宁
日期:2016-07-10 16:09:4115-16赛季CBA联赛之江苏
日期:2016-02-20 23:09:202015亚冠之塔什干棉农
日期:2015-08-17 19:49:492015年亚洲杯之日本
日期:2015-04-30 01:24:342015年亚洲杯之约旦
日期:2015-04-01 00:37:182015年亚洲杯之沙特阿拉伯
日期:2015-03-02 15:55:40处女座
日期:2014-05-25 10:34:0020周年集字徽章-年
日期:2023-04-23 11:17:52
发表于 2017-01-22 16:46 |显示全部楼层
本帖最后由 bikkuri 于 2017-01-22 16:49 编辑

谢谢两位的指点。
column -t不是我想要的结果。
我希望以空格为分隔符而不是制表符。
更何况在openwrt下根本没有column命令。

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2017-02-03 15:56 |显示全部楼层
  1. awk  'NR==FNR{for(i=1;i<=NF;i++){if(length($i)>a[i]){a[i]=length($i)}}};NR!=FNR{for(j=1;j<NF;j++){printf "%-"a[j]"s ",$j};print $NF}' a1 a1
  2. 1483263712 1D00H27M:7   wchip nochange:[0]   [6/247]
  3. 1485057073 47D13H19M:12 abox  nochange:[2/7] [4792/13639]
  4. 1485057076 8D23H33M:2   hbox  nochange:[0/5] [2006/2560]
  5. 1485057199 6D02H20M:0   kbox  nochange:[2/7] [1724/1724]
  6. 1485057075 1D00H04M:0   mbox  nochange:[0/5] [290/290]    *
  7. 1485057135 1D00H01M:31  qbox  nochange:[0/3] [40/270]     *
  8. 1485057080 17D08H34M:0  pbox  nochange:[0/5] [4969/4969]
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP