dividindo uma coluna usando awk

4

Eu tenho um arquivo como mostrado abaixo. A 9ª coluna tem valores unidos por **.

chrXV   234346  234546  snR81   +       SNR81   chrXV   234357  0.0003015891774815342**0.131826816475   +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234385  0.0002208827994288481**0.0118547789578  +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234396  0.0001799579220002955**0.00583993781634 +
chrXV   234346  234546  snR81   +       SNR81   chrXV   234410  0.003451057940295026**0.00352844797952  +

Eu quero ter uma saída onde eu possa ter os 2 valores como colunas sep. Como posso fazer isso no awk?

Esta é a saída que eu quero. Mostrando a primeira linha da saída:

chrXV   234346  234546  snR81   +   SNR81   chrXV   234357  0.0003015891774815342   0.131826816475  +
    
por user3138373 22.09.2014 / 21:16

4 respostas

5

Nenhuma ideia do motivo pelo qual as pessoas estão usando o cat para enviar o arquivo para o awk, e a resposta tr apenas converte um caractere em outro, portanto, qualquer * é convertido em space .

Solução simples de awk

awk -F"**" '$1=$1' OFS="\t" file 

Para tabulação entre todos os campos

awk 'sub(/\*\*/," "){$1=$1}1' OFS="\t" file

E mais um

awk 'gsub(/(*| )+/,"\t")' file

Comando Sed

sed 's/[* ]\+/\t/g' file

comando tr

tr -s '* ' '\t'  < file
    
por 23.09.2014 / 10:53
2

Tem que ser estranho? Por que não cat file | tr '**' ' ' Apenas substituindo os ** com três espaços

    
por 22.09.2014 / 21:20
0
cat text.txt  |awk '{ split($9,a , "**"); printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",$1,$2,$3,$4,$5,$6,$7,$8, a[1], a[2],$10); }'

A saída é:

chrXV   234346  234546  snR81   +   SNR81   chrXV   234357  0.0003015891774815342   0.131826816475  +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234385  0.0002208827994288481   0.0118547789578 +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234396  0.0001799579220002955   0.00583993781634    +
chrXV   234346  234546  snR81   +   SNR81   chrXV   234410  0.003451057940295026    0.00352844797952    +
    
por 22.09.2014 / 22:19
0

A substituição de uma substring por outra é claramente um trabalho para sed. Se você quiser no awk, eu suponho que você queira fazer algum processamento adicional pelo awk. Para fazer isso, você deve usar apenas o separador de campo regex:

awk -F'(**| )' '{.you code here.; print $10}'
    
por 23.09.2014 / 11:12

Tags