Como alternativa, uma solução muito eficiente, mas um pouco mais complicada
sed 'G;s/;/\n/' | awk -F= '
$1~/apiKey/ {key=$2}
$1~/term/ {term=$2}
/^$/ {printf(" apiKey=%s term=%s\n", key, term)
key=""
term=""}'
Primeiro, sed é usado para fazer duas coisas: O comando "G" adicionará efetivamente uma linha aberta após cada "conjunto de registros" e, em segundo lugar, o comando "substituto" ( s/;/\n/
) expandirá efetivamente cada conjunto de registros a ser um por linha, substituindo cada ;
por um caractere de nova linha. O que sai do sed são os pares de valor-chave, um por linha, com uma linha aberta designando o final de cada registro.
Então o awk precisa apenas olhar o primeiro campo para encontrar os atributos nos quais você está interessado e o segundo campo para o valor, o que elimina a necessidade de index e substr. Uma vez que o awk encontra uma "linha aberta", imprime os valores que encontrou. Para resiliência, você pode "limpar" os valores no final de cada registro. Observe o uso de -F=
para instruir o awk a dividir a linha em campos com base no =
-sign.
$1 ~ /.../
significa "Quando o primeiro campo corresponde ao valor /.../
Em seguida, ele atribui um valor a uma variável (chave ou termo)
O /^$/
significa "quando o awk encontra uma linha aberta"