名前フィールドで並べ替えますか?

名前フィールドで並べ替えますか?

次のファイルを並べ替えようとしています。

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 >

11番目のフィールドに基づいてソートしますが、最初のフィールドが原子である場合にのみソートする方法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をリスト内の任意の場所に配置できる場合は、可能な1つの方法は別のファイルにソートして元のファイルの上部または下部、または特定の列に追加することです。私は他の誰かがより簡単な解決策を投稿すると確信しています。今は2セントだけです。

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

関連情報