Apaga tudo após o segundo sublinhado

2

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

    
por Annick Raymond 12.06.2017 / 20:19

4 respostas

1
$ awk -F_ 'BEGIN {OFS="_"} /^>gi/ {print $1,$2} ! /^>gi/ {print}' input
>gi_12
ACGT
>gi_34
CGTA
    
por 12.06.2017 / 20:25
2

Há também um ponteiro curto usando awk :

awk -F_ '{print $1 (NF>1? FS $2 : "")}' yourfile
    
por 12.06.2017 / 20:59
2

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
    
por 12.06.2017 / 21:37
1
sed -ne '/^>gi_/s/_/\n/2;P' yourfile

Explicação

  • Apenas para linhas que começam com a string >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.
por 12.06.2017 / 22:26