считайте группу соответствий и несоответствий

awk -v RS="[, ]" '/free/{print a}{a=$0}'

Объяснение

  • Установите разделитель рекорда в , , а и пространство , поэтому число, предшествующее каждую строку, является записью сама по себе, и так и строка.
  • Имея все как собственное рекорд, awk будет обрабатывать каждый элемент один на один
  • для всех записей до бесплатно , он будет игнорировать {print a} , потому что условие Не совпадает, и он будет пропущен к {a = $ 0} , который будет хранить в настоящее время обработанную запись в переменной A
  • один раз / Free / awk будет просто {print} , где A содержит запись прямо перед матчем
1
17.10.2014, 00:34
1 ответ

PERL РЕШЕНИЕ:

#!/usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

my %values;
while (<>) {
    next if /^$/; # Skip empty lines
    my ($lane, $sample, $var, $val) = split;
    die "Duplicate $lane $sample $var\n" if $values{$lane}{$var}{$val}{$sample};
    $values{$lane}{$var}{$val}{$sample} = 1;
}

my %results;
for my $lane (keys %values) {
    for my $var (keys %{ $values{$lane} }) {
        my $count = keys %{ $values{$lane}{$var} };
        if (1 == $count) {
            ++$results{$lane}{consistent};
        } else {
            ++$results{$lane}{inconsistent};
        }
    }
    say join "\t", $lane, @{ $results{$lane} }{qw{ consistent inconsistent }};
}
0
28.01.2020, 01:52

Теги

Похожие вопросы