awk -v RS="[, ]" '/free/{print a}{a=$0}'
Объяснение
,
, а и пространство
, поэтому число, предшествующее каждую строку, является записью сама по себе, и так и строка. бесплатно
, он будет игнорировать {print a}
, потому что условие Не совпадает, и он будет пропущен к {a = $ 0}
, который будет хранить в настоящее время обработанную запись в переменной A
/ Free /
awk будет просто {print}
, где A
содержит запись прямо перед матчем 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 }};
}