Concatenar diferentes campos com diferentes separadores

2

Eu tenho um arquivo delimitado por tabulações como este:

chr1    53736473        54175786
chr1    56861276        56876438
chr1    57512145        57512200

Eu quero concatenar os três campos com o seguinte resultado:

chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200

Eu tentei com paste -d ':-' file , o que aparentemente não funcionou. Alguém poderia ajudar?

O ideal seria com o comando unix simples, eu sei que é bastante fácil com uma linguagem superior.

    
por Jun Cheng 06.11.2014 / 18:08

4 respostas

5

com sed:

$ sed 's/\(.*\)\t\(.*\)\t/:-/' file

chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200

printf:

printf "%s:%s-%s\n" $(< file)

chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200
    
por 06.11.2014 / 18:19
5

Para o seu exemplo,

awk '{print $1":"$2"-"$3}' your_file

funcionará, mas pressupõe que você sempre terá exatamente 3 campos.

    
por 06.11.2014 / 18:18
2

Você pode usar duas expressões sed :

sed -e "s/\t/,/" -e "s/\t/-/" your_file
    
por 06.11.2014 / 18:20
2

Com paste e printf :

$ printf '%s\n%s\n%s\n' $(cat file) | paste -sd ':-\n' -
chr1:53736473-54175786
chr1:56861276-56876438
chr1:57512145-57512200
    
por 06.11.2014 / 18:22