Sua segunda solução funciona bem aqui. Seu primeiro não porque gensub
returns the modified string as the result of the function and the original target string is not changed.1
Você pode atribuir o resultado a uma variável e, em seguida, atualizar $1
, por exemplo,
awk '{x=gensub(/\w{2}\|(\w+)\|\w+/,"\1","1",$1);$1=x};1' infile
embora eu faça assim:
awk '{split($1,arr,"|");$1=arr[2]};1' infile