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}'