Isso é feito com mais facilidade usando awk no lugar de sed ; no caso de awk ser uma opção:
< input awk 'BEGIN {FS=OFS="\t"} {if ($3~/PT~/) sub(/.*PT~/, "", $3); else $3="NA"; print}'
Expandido:
BEGIN {
FS=OFS="\t"
}
{
if ($3 ~ /PT~/)
sub(/.*PT~/, "", $3);
else
$3 = "NA";
print
}
-
BEGIN {FS=OFS="\t"}: configura o separador de campos 1 e o separador de campos de saída 2 comoTAB, de modo que cada stringTAB-separated é destinada como um campo de um registro ( 1 ) e para que o separador seja impresso após cada registro ( 2 ); -
{if ($3~/PT~/) sub(/.*PT~/, "", $3); else $3="NA"; print}: se o terceiro campo do registro ($3) corresponder (~) à expressão regularPT~(/PT~/) (ou seja, se contiver), substitua a primeira correspondência mais ampla à esquerda (sub()) da expressão regular/.*PT~/(/.*PT~/, que corresponde a tudo até a última ocorrência de uma substringPT~) com uma string vazia ("") no terceiro campo do registro ($3), caso contrário, defina o terceiro campo ($3) comoNA("NA") e imprima o registro;