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;