+ -
当前位置:首页 → 问答吧 → 请问,如何将一个文件按列输出到不同文件中?

请问,如何将一个文件按列输出到不同文件中?

时间:2011-03-06

来源:互联网

我有一个文件,模式如下:
  1. 1 2 3 4 5 6 7 8 9 0
  2. 1 2 3 5 7 9 8 5 6 0  
  3. 2 4 3 2 1 5 6 7 8 9
  4. ...
复制代码
我想把这个文件按列输出到新的文件中,即得到10个新文件,里面内容大致为:
  1. 1
  2. 1
  3. 2
复制代码
  1. 2
  2. 2
  3. 4
复制代码
...

请问下用perl如何实现,谢谢!
PS:由于我的原始文件列数较多(几百个),人工弄的话要弄好久,而且这些列里面可能还有错误,人工弄的话可能不只弄一次,请各位帮帮忙,非常感谢!

作者: xp198766   发布时间: 2011-03-06

本帖最后由 x9x9 于 2011-03-06 12:34 编辑

不一定是效率最高,但可以实现:
  1. use strict;
  2. use warnings;
  3. use IO::File;
  4. open IN,"yourfile" or die "can't open file:$!\n";
  5. my %col;
  6. while(<IN>){
  7. chomp;
  8. my @lines=split / /;
  9. foreach my $line (0..$#lines) {
  10. push @{$col{"$line"}},$lines[$line];
  11. }
  12. }

  13. foreach my $k (keys %col){
  14. my $fh=IO::File->new("> $k.txt") or die "can't create fh:$!\n";
  15. print $fh join("\n",@{$col{$k}});
  16. }

  17. close IN;
复制代码

作者: x9x9   发布时间: 2011-03-06

本帖最后由 xp198766 于 2011-03-06 12:34 编辑

回复 x9x9


    非常感谢!
我运行后显示:
  1. Global symbol "%hash" requires explicit package name at te line 11.
  2. Execution of te aborted due to compilation errors.
复制代码
请问问题出在哪里啊?
line 11就是上面的line 10

作者: xp198766   发布时间: 2011-03-06

不好意思,打错了,改正了。

作者: x9x9   发布时间: 2011-03-06

回复 x9x9


    谢谢耐心解答,运行之后,仅出现了一个0.txt文件  里面内容和原始文件一样……

作者: xp198766   发布时间: 2011-03-06

看下你文件每列是用什么分割的,改一下 my @lines=split / /; 这句啊。

作者: x9x9   发布时间: 2011-03-06

回复 x9x9


    非常感谢!我还以为split那里,你是专门那样写的呢,谢谢!OK了!

作者: xp198766   发布时间: 2011-03-06

热门下载

更多