Вы можете использовать для этого скрипт на Perl, например:
pax> perl -ne '{
@arr=split;
if (@arr[7] =~ /^END=/) {
@arr[7] =~ s/^END=//;
} else {
@arr[7] =~ s/^.*;END=//;
}
@arr[7] =~ s/;.*$//;
printf "%s %s %s\n", @arr[0], @arr[1], @arr[7];
}' <qq.in
2 118610455 118610566
1 859214 860180
Я отформатировал этот скрипт для удобства чтения, но вы можете так же легко использовать однострочник:
perl -ne '{@arr=split;if (@arr[7] =~ /^END=/) {@arr[7] =~ s/^END=//;} else {@arr[7] =~ s/^.*;END=//;} @arr[7] =~ s/;.*$//; printf "%s %s %s\n", @arr[0], @arr[1], @arr[7];}' <qq.in
Как это работает, просто понимаешь.split
дает массив элементов в строке, и вам просто нужно немного изменить число 7.
Если оно начинается с END=
, просто избавьтесь от этого бита.В противном случае избавьтесь, если все, вплоть до ;END=
.
Затем избавьтесь от всего после первого ;
(в уже измененной версии, в которой бит N
равен END=N
наначало).
Затем просто распечатайте три требуемых значения.
Подумав об этом еще немного, может быть, лучше что-то немного проще, например:
pax> perl -ne '{
($a,$b,$x,$x,$x,$x,$x,$c,$x) = split;
$c = ";$c";
$c =~ s/^.*;END=//;
$c =~ s/;.*$//;
print "$a $b $c\n";
}' <qq.in
или эквивалентный однострочный:
perl -ne '{($a,$b,$x,$x,$x,$x,$x,$c,$x)=split;$c=";$c";$c=~s/^.*;END=//;$c=~s/;.*$//;print "$a $b $c\n";}' <qq.in