Classificando por um campo de nome?

3

Estou tentando classificar o seguinte arquivo

link .

Mas a parte que estou tentando classificar é o campo 11 e somente se o primeiro campo for átomo. Aqui está um exemplo

  ATOM     33  CG  ASP A 438       8.283  24.407 131.412  1.00 17.18           C  
 ATOM     34  OD1 ASP A 438       9.153  23.597 131.783  1.00 17.73           O  
 ATOM     35  OD2 ASP A 438       7.530  25.009 132.208  1.00 18.39           O  
 ATOM     36  N   PHE A 439       5.102  23.813 128.903  1.00 12.35           N  
 ATOM     37  CA  PHE A 439       3.680  23.598 129.138  1.00 12.15           C  

Eu sei como classificar um arquivo com base em campos. Por exemplo, para o meu arquivo, seria

            sort -k11 <\file path >

classificar com base no décimo primeiro campo, mas como faço para classificar apenas se o primeiro campo é o átomo b / c existem campos que vão para 11 e começam com HETATM e tal.

    
por Fernando Martinez 16.09.2014 / 19:11

2 respostas

2

Isso deve funcionar, se eu entendi corretamente, você quer apenas as linhas que começam com ATOM .

sort -k11 <(awk '$1 ~ /ATOM/' file)

Explicação:

  • sort -k11 : classificar pelo 11º campo
  • awk '$1 ~ /ATOM/' file : imprime apenas os campos que começam com ATOM
  • A parte awk é a entrada para a parte sort
por 16.09.2014 / 19:31
1

Como você gostaria que o resultado final se parecesse? Todas as linhas com o primeiro campo ATOM devem aparecer no topo do arquivo, fim do arquivo?

Se não há problema em ter os ATOMs em qualquer lugar da lista, uma maneira possível é classificá-los em um arquivo diferente e anexá-los ao início ou ao final do arquivo original ou a uma coluna específica. Tenho certeza de que alguém postará uma solução mais fácil - apenas meus dois centavos por enquanto ..

grep -v ^ATOM file > result; sort -k11 < grep ^ATOM file >> result
    
por 16.09.2014 / 19:36

Tags