$ awk -F_ 'BEGIN {OFS="_"} /^>gi/ {print $1,$2} ! /^>gi/ {print}' input
>gi_12
ACGT
>gi_34
CGTA
Eu quero excluir todo o texto após o segundo sublinhado (incluindo o próprio sublinhado), mas não em todas as linhas. Cada uma das linhas de destino começa com um padrão (> gi_).
EXEMPLO.
Entrada
>gi_12_pork_cat
ACGT
>gi_34_pink_blue
CGTA
Resultado
>gi_12
ACGT
>gi_34
CGTA
Há também um ponteiro curto usando awk
:
awk -F_ '{print $1 (NF>1? FS $2 : "")}' yourfile
para os preguiçosos entre nós:
cut -d_ -f1,2 input
nos dá:
bash-[514]$ cat input
>gi_12_pork_cat
ACGT
>gi_34_pink_blue
CGTA
bash-[515]$ cut -d_ -f1,2 input
>gi_12
ACGT
>gi_34
CGTA
sed -ne '/^>gi_/s/_/\n/2;P' yourfile
>gi_
, tentamos efetuar o sub _ ---> \n
. Em seguida, imprimimos o espaço de padrão usando o comando P
, que imprime até a primeira nova linha, se encontrar uma ou a totalidade dela.