次のファイルを並べ替えようとしています。
しかし、私がソートしたい部分は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