我正在尝试对以下文件进行排序
但我试图排序的部分是 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