Você só precisa ser criativo sobre seu separador de campo:
$ awk 'BEGIN {FS="_|-"} {print $2}' input
5
O truque com FS
é que não é uma string; é uma expressão regular.
Para explicar um pouco mais detalhadamente conforme você solicita abaixo:
Um script awk
pode definir um bloco de código denominado BEGIN
, que é executado antes que qualquer dado recebido seja processado.
Eu uso este bloco de código para definir o separador de campo ( FS
) usando uma expressão regular como um hífen ( -
) ou sublinhado ( _
).
O próximo bloco de código, {print $2}
, imprimirá o segundo campo (isto é, a segunda sequência de caracteres delimitada pelo separador até aqui, /-|_/
), que é o 5
que você procura. Um bloco de código sem prefixo será executado para cada registro lido por awk
.