Поскольку «тег» - это часть после предпоследнего _
, вы можете просто использовать его как разделитель полей:
$ awk -F_ '{if($(NF-1)~/LY1/){print $(NF-1)}else{print}}' file
LY1-1250
LY1-1250
LY1-1250
LY1-1250
Или, чтобы использовать его как переменную:
awk -F_ '{if($(NF-1)~/LY1/){tag=$(NF-1); print tag}else{print}}' file
Я не понимаю, почему у вас есть код в блоке BEGIN {}
, который запускался бы только один раз и до того, как были прочитаны какие-либо строки, поэтому NF
даже не будет определен.
В общем случае для сохранения подстроки в переменной в awk можно использовать substr
или sub
. Итак, вы также могли бы сделать что-то вроде:
$ awk '{
if($NF~/LY1/){
tag=$NF;
sub(/.*LY1/,"LY1",tag);
sub(/_[^_]*$/,"",tag);
print tag
}
else{ print } }' file
LY1-1250
LY1-1250
LY1-1250
LY1-1250
У меня была та же проблема, что и у вас. Я решил это с помощью ipxe. pxe должен использовать ip, pxe не упоминает интерактивный интерфейс, вы должны использовать альтернативный инструмент ipxe.