每16个逗号分隔一行

时间:2014-04-18 01:18:59

标签: perl formatting extract

我正在使用perl来提取"是的,"或"不,"从大型CSV,并使用此代码输出到文件

open my $fin, "leads.csv";
my $str;
for (<$fin>) {                
  if (/^\s*\d+\.\s*(\w+)/) {  
    $str .= $1 . ",";         
  }
}
open (MYFILE, '>>data.txt');
 print MYFILE $str;
 close (MYFILE);

这是正常的,并输出像http://pastebin.com/r7Lwwz8p这样的数据,但我需要打破 到第16个元素后的新行,所以在输出中看起来像这样:http://pastebin.com/xC8Lyk5R 任何提示/技巧都非常感谢!

2 个答案:

答案 0 :(得分:1)

以下用逗号分隔一行,然后将它们重新组合为16个元素:

use strict;
use warnings;

while (my $line = <DATA>) {
    chomp $line;

    my @fields = split ',', $line;

    while (my @data = splice @fields, 0, 16) {
        print join(',', @data), "\n";
    }
}

__DATA__
LineA,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineB,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineC,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineD,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineE,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineF,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineG,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,LineH,2,3,4,5,6,7,8,9,10,11,12

输出:

LineA,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineB,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineC,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineD,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineE,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineF,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineG,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16
LineH,2,3,4,5,6,7,8,9,10,11,12

答案 1 :(得分:0)

使用变量计算找到的是/否匹配数,然后使用mod(%)运算符在字符串中插入换行符。

#!/usr/bin/perl

use strict;
use warnings;

open my $fin, "leads.csv";
my $str;
my $count = 0;                
for (<$fin>) {
   if (/^\s*\d+\.\s*(\w+)/) {
     $str .= $1 . ",";
     $count++;         
   }
   $str .= "\n" unless ($count % 16);
}
open (MYFILE, '>>data.txt');
print MYFILE $str;
close (MYFILE);