sed または awk を使用して入力ファイルに新しいパターンが必要です。

sed または awk を使用して入力ファイルに新しいパターンが必要です。

次のデータがあります。

MGW: VMG110
836-16
836-18
836-19
336-20
836-23
MGW: VMG120
3802-1
3802-2
3802-3
3456-1
3456-4

希望の出力は次のとおりです。

VMG110:836-16&-18&&-20&-23
VMG120:3802-1&&-3&3456-1&-4

与えられたデータ-1、-2、-3、-4は常にソートされます。

出力に-19がありません...-18&&の代わりに-20があります。ここで && は 18~20 を意味します。同じように提供してください。

ベストアンサー1

パールソリューション。出力の最初の行があなたのものとは異なります(必要な出力に以下がありませんか-?)。&

#!/usr/bin/perl
use warnings;
use strict;

my $first = 1;
my @line;

sub output {
    print join('&', @line), "\n" unless $first;
}


my $previous = q();
while (<>) {
    chomp;
    if (s/.*: //) {
        output();
        print "$_:";
        $previous = q();
        @line = ();

    } else {
        my ($prefix, $suffix) = split /-/;
        if ($prefix ne $previous) {
            push @line, "$prefix-$suffix";
        } else {
            push @line, "-$suffix";
        }
        $previous = $prefix;
    }
    undef $first;
}
output(); # Don't forget to output the last line.

おすすめ記事