Analise a estrutura da entrada:
key1=value1;key2=value2
Estes são campos separados por ;
, que você pode analisar fazendo ;
o separador de campos. Em seguida, para extrair o valor de um campo, use a função sub
para remover a key=
part (ou split
on /=/
e obter a segunda parte ou obter a subsequência após index
de =
). Se a hora estiver sempre no segundo campo, essa é uma abordagem simples:
awk -F ';' '{sub(/^[^=]*=/, $2); print $2}'
Se você quiser acessar o campo pelo nome (que provavelmente é mais robusto), poderá fazer um loop pelos campos:
awk -F ';' '{i=1; while (i <= NF) {if ($i ~ /^EsbTiming=/) {sub(/^[^=]*=/, $i); print $i}}}'
Se você tiver apenas uma linha para analisar, é mais simples tornar ;
o separador de registro e =
o separador de campo.
awk -F '=' -v RS=';' '$1 == "EsbTiming" {print $2}'
Observe que isso imprime uma nova linha extra. Isso não é uma preocupação se você estiver usando este comando em uma substituição de comando em um script de shell (… | awk …)
. Se você não quiser essa nova linha extra, defina ORS
(separador de registro de saída) como a string vazia:
awk -F '=' -v RS=';' -v ORS= '$1 == "EsbTiming" {print $2}'
Há também a abordagem de expressão regular direta, que fornece bons resultados.
awk 'match($0, /(^|;)EsbTiming=/) {s = substr($0, RSTART+RLENGTH); sub(/;.*/, "", s); print s}'