В Perl, как я могу соединить строку ввода со следующей, только если выполняется какое-то условие? - PullRequest
1 голос
/ 04 ноября 2011

Мои строки

Line: foobar, foo
Line: webar, webar, we
Line: 
abcabc
abc
Line: 
xyzxyz
xyz

Я хочу объединить их в одну строку:

Line: foobar, foo
Line: webar, webar, we
Line: abcabc, abc
Line: xyzxyz, xyz

Ответы [ 2 ]

0 голосов
/ 04 ноября 2011

Один из способов - прочитать весь файл и разделить его на \nLine:, а затем выполнить некоторые исправления данных.

use strict;
use warnings;
use Data::Dumper;

my $data = <<EOF;
Line: foobar, foo
Line: quxbar, quxbar, quxx
Line: 
abcabc
abc
EOF

$data =~ s/^Line: //;
my @lines = split("\nLine: ", $data);
s/\n/, /g for @lines;

print join "\n", map { "Line: $_" } @lines;
0 голосов
/ 04 ноября 2011

script.pl :

#!/usr/bin/perl -w

my @lines;

while(<>) {
        chomp;

        if(m/^Line: /) {
                push @lines, $_;
        }
        else {
                if(length $lines[-1] == 6) {
                        $lines[-1] .= $_;
                }
                else {
                        $lines[-1] .= ", $_";
                }
        }
}

print "$_\n" for @lines;

Сохраните пример ввода как файл file и запустите

cat file | perl script.pl
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...