按名称字段排序?

按名称字段排序?

我正在尝试对以下文件进行排序

http://pastebin.com/EqA2SUMy

但我试图排序的部分是 11 字段,并且仅当第一个字段是原子时。这是一个例子

  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  

我知道如何根据字段对文件进行排序。例如对于我的文件来说它将是

            sort -k11 <\file path >

基于第十一个字段进行排序,但如何使其仅在第一个字段是原子 b/c 时才进行排序,有些字段会转到 11 并以 HETATM 等开头。

答案1

这应该有效,如果我理解正确的话,你只需要以 . 开头的行ATOM

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

解释:

  • sort -k11:按第11个字段排序
  • awk '$1 ~ /ATOM/' file:仅打印以以下内容开头的字段ATOM
  • 该部分是该部分awk的输入sort

答案2

您希望最终结果如何?第一个字段 ATOM 的所有行都应该出现在文件顶部、文件末尾吗?

如果可以将 ATOM 放在列表中的任何位置,那么一种可能的方法是将它们排序在不同的文件中,并附加到原始文件的顶部或底部或特定列。我确信其他人会发布一个更简单的解决方案 - 现在只需我的两分钱..

grep -v ^ATOM file > result; sort -k11 < grep ^ATOM file >> result

相关内容