С небольшими манипуляциями со строками вы можете получить его за один раз.
what_i_want=$(awk '{sub(/^END=/,"",$8); sub(/;.*$/,"",$8); print $1,$2,$8}' line)
Некоторое объяснение:
sub(a,b,c)
ищет шаблон a
в переменной c
и заменяет егоэто с b
, сохраняя измененную строку обратно в c
.Шаблоны записываются в //
.
^
- начало строки, $
- конец, .
- что угодно, а *
означает ноль или более предыдущего шаблона.Так что в нашем случае:
sub(/^END=/,"",$8);
соответствует END=
в начале (^
) строки и заменяет ее на ""
, ничего, по существу удаляя ее.
sub(/;.*$/,"",$8);
берет все (.*
) от ;
до конца ($
) и удаляет его.Обратите внимание, что в awk, как и в большинстве движков регулярных выражений, *
равен жадным , что означает, что он берет самое длинное совпадение, которое он может получить, поэтому мы знаем, что оно получит первое ;
.
И все, что нам осталось, это номер, который вы хотите.