免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3385 | 回复: 8
打印 上一主题 下一主题

如何从文件中每隔固定间距取出一行? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-04-05 12:09 |只看该作者 |倒序浏览
如题,
有一个文件,想每隔3行取出一组,组成一个新的文件,直到原始文件取完。例如:
1 a b
2 a b
3 a b
4 a b
5 a b
6 a b
7 a b

想要得到如下几个文件:

1 a b
4 a b
7 a b


2 a b
5 a b


3 a b
6 a b

有什么比较简单的方法吗?
我是新手,请大侠们指教。
谢谢。

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2011-04-05 13:18 |只看该作者
回复 1# junlingpang


    awk '{print >NR%3+1".txt"}' file

论坛徽章:
0
3 [报告]
发表于 2011-04-05 13:25 |只看该作者
  1. #! /usr/bin/perl
  2.       2
  3.       3 my $file = '1.txt';
  4.       4 my $count = 3;
  5.       5 open F , $file or die 'open file failure';
  6.       6 for($i=0;$i<$count;$i++){
  7.       7
  8.       8         open "F_$i" , ">>$file.part$i" or die 'open file failure';
  9.       9 }
  10.      10
  11.      11 while(readline(F)){
  12.      12         my $f ="F_".$. % $count;
  13.      13         syswrite($f, $_);
  14.      14 }
  15.      15
  16.      16
  17.      17 close F;
  18.      18 for($i=0;$i<$count;$i++){
  19.      19
  20.      20         close "F_$i";
  21.      21 }
复制代码

论坛徽章:
0
4 [报告]
发表于 2011-04-05 13:35 |只看该作者

  1. use strict;
  2. use IO::File;
  3. open IN,"<exp.txt" or die "can't open file:$!";
  4. my @fh;
  5. for (0..2){
  6. @fh[$_]=(IO::File->new(">>file$_.txt") or die "can't open file:$!\n");
  7. }
  8. my $n=0;
  9. while (<IN>) {
  10. print {@fh[$n]} $_;
  11. $n++;
  12. $n=0 if $n>2;
  13. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2011-04-05 14:07 |只看该作者
嗯,解决了,谢谢大侠们

论坛徽章:
0
6 [报告]
发表于 2011-04-10 01:18 |只看该作者
自己也贴一个,比较笨,呵呵。

#!/usr/bin/perl

my @txt;
my %hash;
open FILE,"<hash.txt";

my $hash="";
my $i=1;
while (<FILE>)
{
chomp($_);
$hash{$i++}=$_;
}

open FH1,">aaa.txt";
open FH2,">bbb.txt";
open FH3,">ccc.txt";
for my $k(sort { $a <=> $b } keys %hash)
{
print $k%3,"\n";
print  FH1 $hash{$k},"\n" if($k%3==1);
print  FH2 $hash{$k},"\n" if($k%3==2);
print  FH3 $hash{$k},"\n" if($k%3==0);
}
close (FH1);
close (FH2);
close (FH3);

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
7 [报告]
发表于 2013-01-18 11:29 |只看该作者
也贴一个:
  1. #!/usr/bin/perl
  2. my @f = map { open my ($f), '>', $_; $f } qw/1 2 3/;
  3. print { $f[ $. % 3 - 1 ] } $_ while <DATA>;

  4. __DATA__
  5. 1 a b
  6. 2 a b
  7. 3 a b
  8. 4 a b
  9. 5 a b
  10. 6 a b
  11. 7 a b
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2013-01-21 04:57 |只看该作者
回复 7# rubyish


    学习了

论坛徽章:
0
9 [报告]
发表于 2013-01-21 09:17 |只看该作者
回复 7# rubyish


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP