awk manipulação do arquivo

3

Eu tenho um arquivo grande neste formato, cujas primeiras linhas estou mostrando a você incluindo o cabeçalho.

gene    c1  c2  c3  c4  c5  c6  c7  c8
G1*1    0   0   0   0   0   0   0   0
G2*2    0   0   0   0   1   1   1   1
G3*3    0   0   2   2   44  44  62  62
G4*4    22  0   46  0   1308    7   1773    4

A primeira linha com o gene é a linha de cabeçalho. Eu quero mantê-lo como está e, em seguida, quero dividir a linha restante com FS = *, de modo que agora eu tenho um arquivo parecido com isso como saída

gene    coord   c1  c2  c3  c4  c5  c6  c7  c8
G1  1   0   0   0   0   0   0   0   0
G2  2   0   0   0   0   1   1   1   1
G3  3   0   0   2   2   44  44  62  62
G4  4   22  0   46  0   1308    7   1773    4

Então eu também quero colocar um campo extra na linha de cabeçalho chamada 'coord', para que quando eu dividir as linhas subseqüentes eu tenha tudo ordenado.

Eu sei como usar o awk para dividir, mas a linha de cabeçalho é o que está me confundindo

awk -F '*' -v OFS="\t" '{print $1,$2}' ##This is for 2nd line and onwards
    
por user3138373 17.12.2014 / 16:58

3 respostas

5

A linha de cabeçalho é um caso especial, então você pode lidar com isso como um caso especial.

awk -F '*' -v OFS='\t' \
  'NR == 1 { sub(/^gene/, "&" OFS "coord"); print; next }
  { print $1, $2 }'
    
por 17.12.2014 / 17:24
4

O uso de awk é um requisito absoluto? Isso parece mais um trabalho para sed :

sed '1s/gene/&    coord/;2,$s/\*/  /'

que é quase auto-explicativo:

  • 1s/gene/& coord/ - na primeira linha, mude “gene” para “gene coord”.
  • 2,$s/\*/ / - na segunda linha até o final do arquivo, mude o literal “*” para o espaço em branco.
por 17.12.2014 / 22:33
4

Aqui está outra abordagem:

awk -F '[ \t*]' -v OFS='\t' 'NR==1{$2="coord\t"$2;print;next}{$1=$1}1' file
  • O arquivo de entrada não estava claro para mim, então usei 3 separadores de campo: espaço, tabulação e * . Provavelmente, você pode remover algo da lista se agora sua entrada for melhor.

  • $1=$1 basicamente não faz nada, é necessário reorganizar os campos (use o novo separador de campos em todos os lugares)

  • final 1 é usado apenas para imprimir tudo após a modificação.

por 17.12.2014 / 17:36

Tags