免费注册 查看新帖 |

Chinaunix

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

[文本处理] awk 列对齐求教 [复制链接]

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-01-21 07:42 |显示全部楼层
#--------# root /home/ixi/hi-p
# cat /etc/passwd | head -6 | awk -F ':' '{for(i=1;i<=NF;i++)if(i!=NF){sub(/:/,"[ \t]",$i);printf("%s ",$i)}else{sub(/:/,"[ \t]",$i);printf("%s\n",$i)}}'
root x 0 0 root /root /bin/bash
daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
bin x 2 2 bin /bin /usr/sbin/nologin
sys x 3 3 sys /dev /usr/sbin/nologin
sync x 4 65534 sync /bin /bin/sync
games x 5 60 games /usr/games /usr/sbin/nologin
#--------# root /home/ixi/hi-p
# cat /etc/passwd | head -6 | awk -F':' '{print $1"\t"$2"\t"$3}'
root    x    0
daemon    x    1
bin    x    2
sys    x    3
sync    x    4
games    x    5
#--------# root /home/ixi/hi-p
2条awk,第一条失败,
希望像第二条一样列对齐

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
发表于 2017-01-21 08:33 |显示全部楼层
%18s

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-01-21 09:30 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-01-21 09:36 编辑
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. my (@aData, @aWidthList) = ((), ());
  5. while (<DATA>){
  6.     my @aT = split;
  7.     foreach (0 .. $#aT){
  8.         next if (length ($aT[$_]) <= ($aWidthList[$_] // 0));
  9.         $aWidthList[$_] = length ($aT[$_]);
  10.     }
  11.     push (@aData, \@aT);
  12. }

  13. foreach my $ra (@aData){
  14.     while (my ($n, $v) = each @{$ra}){
  15.         printf ("%-$aWidthList[$n]s\t", $v);
  16.     }
  17.     print "\n";
  18. }

  19. __DATA__
  20. root x 0 0 root /root /bin/bash
  21. daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin
  22. bin x 2 2 bin /bin /usr/sbin/nologin
  23. sys x 3 3 sys /dev /usr/sbin/nologin
  24. sync x 4 65534 sync /bin /bin/sync
  25. games x 5 60 games /usr/games /usr/sbin/nologin
  26. #--------# root /home/ixi/hi-p
复制代码

应该是对齐了

应该是对齐了

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-01-21 09:42 |显示全部楼层
回复 2# waker

# cat /etc/passwd | head -6 | awk -F ':' '{for(i=1;i<=NF;i++)if(i!=NF){sub(/:/,"[ \t]",$i);printf("%-12s ",$i)}else{sub(/:/,"[ \t]",$i);printf("%-12s\n",$i)}}'

论坛徽章:
22
2015年亚洲杯之科威特
日期:2015-04-18 15:27:07每日论坛发贴之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之广夏
日期:2016-03-28 16:20:51程序设计版块每日发帖之星
日期:2016-04-09 06:20:00CU十四周年纪念徽章
日期:2016-05-03 09:35:1415-16赛季CBA联赛之天津
日期:2016-11-18 08:31:3115-16赛季CBA联赛之山西
日期:2016-12-07 16:29:5315-16赛季CBA联赛之八一
日期:2017-01-10 11:34:3415-16赛季CBA联赛之吉林
日期:2017-03-30 22:51:1915-16赛季CBA联赛之广夏
日期:2017-04-13 20:51:52程序设计版块每日发帖之星
日期:2016-01-27 06:20:00每日论坛发贴之星
日期:2015-12-28 06:20:00
发表于 2017-01-21 09:47 |显示全部楼层
  1. column -t
复制代码

论坛徽章:
6
程序设计版块每日发帖之星
日期:2016-05-11 06:20:00操作系统版块每日发帖之星
日期:2016-05-12 06:20:00每日论坛发贴之星
日期:2016-05-12 06:20:00操作系统版块每日发帖之星
日期:2016-05-14 06:20:00程序设计版块每日发帖之星
日期:2016-05-31 06:20:00每日论坛发贴之星
日期:2016-05-31 06:20:00
发表于 2017-01-22 09:10 |显示全部楼层
cat /etc/passwd | awk -F ':' '{for(i=1;i<=NF;i++)if(i!=NF){sub(/:/,"[ \t]",$i);printf("%-18s ",$i)}else{sub(/:/,"[ \t]",$i);printf("%-18s\n",$i)}}' | column -t | nl

论坛徽章:
0
发表于 2017-02-03 15:38 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP