Como separar os nomes dos genes unidos pelo sublinhado?

1

Eu gostaria de separar os nomes dos genes que foram unidos por traço. Eu gostaria de substituir por guias.

Meu arquivo de entrada é:

Cedr3g0570.1_XP_019283.1
Cedr4g7930.2_XP_019241.1
Cedr5g005170.1_C0LGS3.1
Cedr7g0290.5_XP_01921.1
CT35v5_contig_2082_1.6_XP_0272.1
CT35v5_Cedr2g060.1_GAU97.1
CT7New_004.1_XP_01996.1

Mas gostaria da seguinte saída:

Cedr3g0570.1            XP_019283.1
Cedr4g7930.2            XP_019241.1
Cedr5g005170.1          C0LGS3.1
Cedr7g0290.5            XP_01921.1
CT35v5_contig_2082_1.6  XP_0272.1
CT35v5_Cedr2g060.1      GAU97.1
CT7New_004.1            XP_01996.1

A questão é que não posso simplesmente substituir o primeiro traço porque eu tenho alguns genes com traço em seus nomes, como CT35v5_contig_2082_1.6. Eu tentei usar sed 's/_/\t/' , mas não funcionou para alguns genes, como CT35v5_contig_2082_1.6

    
por Paul 15.02.2017 / 20:32

2 respostas

3
sed 's/\(\.[0-9]\)\(_\)/ /' inputfile | column -t

A expressão regular /\.[0-9]_/ parece corresponder ao seu caso, então divido isso em dois grupos de referências anteriores usando parênteses e imprimo o primeiro grupo e alguns espaços em branco, separando suas colunas, que podem ser tabularizadas usando column -t .

    
por 15.02.2017 / 20:51
2

Parece que o sublinhado que você deseja substituir é SEMPRE após um ponto . seguido por um único dígito [0-9] .

sed 's|\.\([0-9]\)_|.\t|'

Isso irá procurar por um ponto literal \. seguido por um único dígito que será salvo em um grupo \([0-9]\) seguido por um sublinhado _ . Substitua por um ponto, o primeiro grupo que salvamos e uma guia \t .

    
por 15.02.2017 / 20:57