LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 742|回复: 2

如何实现这样的自动换列转换?

[复制链接]
发表于 2007-3-26 20:05:14 | 显示全部楼层 |阅读模式
譬如 这样的格式,原数据是二维的,每列结束都有个"end"标志:
如何从

  1. 11        a1
  2. 21        a1
  3. 31        a1
  4. 41        a1
  5. 51        a1
  6. 0        end
  7. 12        b2
  8. 22        b2
  9. 32        b2
  10. 42        b2
  11. 52        b2
  12. 0        end
  13. 12        c3
  14. 22        c3
  15. 32        c3
  16. 42        c3
  17. 52        c3
  18. 0        end
复制代码

转换成这样子:

  1. 11        a1        12        b2        12        c3
  2. 21        a1        22        b2        22        c3
  3. 31        a1        32        b2        32        c3
  4. 41        a1        42        b2        42        c3
  5. 51        a1        52        b2        52        c3
  6. 0        end         0        end         0        end
复制代码
发表于 2007-3-29 08:08:06 | 显示全部楼层
可以用csplit分割,再用paste合并。
如果文件不是特别大,也可以用awk
回复 支持 反对

使用道具 举报

发表于 2007-3-30 22:15:34 | 显示全部楼层
假设原文件存于foo中
  1. [0 No.2034 huan@huan ~/tmp]$ cat bar.pl
  2. #! /usr/bin/perl -w
  3. use strict;
  4. my @aoa = ();
  5. my $row = 0;
  6. open (FH, "./foo") or die $!;
  7. while (<FH>) {
  8.     push @{$aoa[$row]}, split;
  9.     $row++;
  10.     /end/ and $row = 0;
  11. }
  12. for $row (@aoa) {
  13.     print "@$row\n";
  14. }
  15. [0 No.2035 huan@huan ~/tmp]$ perl bar.pl
  16. 11 a1 12 b2 12 c3
  17. 21 a1 22 b2 22 c3
  18. 31 a1 32 b2 32 c3
  19. 41 a1 42 b2 42 c3
  20. 51 a1 52 b2 52 c3
  21. 0 end 0 end 0 end
  22. [0 No.2036 huan@huan ~/tmp]$
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表