Linuxのソートの問題

Linuxのソートの問題

遺伝子名と発現値でファイルをソートしています。すべてのファイルの正確な行数は同じですが、ソート後のいくつかの遺伝子の位置に違いがあります。これはとても奇妙です。以下は、これら2つのファイルの順序付きバージョンです。

たとえば、

Cxx1c   25.1695
Cxxc1   15.2228
Cxxc4   0.952061
Cxxc5   3.13309
**Cyb5  157.426**
Cyb561  0.425933
Cyb561a3    9.55082
Cyb561d1    4.00422
Cyb561d2    3.04411
Cyb5b   16.7622
Cyb5d1  7.25191
Cyb5d2  2.85109
Cyb5r1  15.2511
Cyb5r2  0.48748

他のファイルにもこのようなソートがあります。デフォルトでは、このファイルではCyb5がCyb561d2遺伝子の後ろに存在します。どのように正確に同じソート順序を持つことができますか?このようなタスクを実行するパラメータはありますか?

Cxx1c   44.9795
Cxxc1   19.0346
Cxxc4   1.17429
Cxxc5   2.71589
**Cyb561    7.11003**
Cyb561a3    1.97601
Cyb561d1    2.13004
Cyb561d2    2.03376
Cyb5    64.074
Cyb5b   14.5329
Cyb5d1  12.0212
Cyb5d2  1.47763
Cyb5r1  10.5463
Cyb5r2  0

上記のソートされたファイルを生成するコードは次のとおりです。

for i in *.txt; do
    sort  -d $i >$i.sort
done

ベストアンサー1

Cyb5 157.426最初のソートステップでは、ロケールスペースは無視されるため、最初にソートして最後にソートするので、Cyb561 0.425933順序Cyb5 64.074は英語の辞書の順序に近いです。Cyb561 7.11003

たとえば、辞書では、との間に見つけることa prioriができます。apiaryArrival

ここではCyb5 157.426最初のパスと比較します。なぜなら、Cyb561 0.425933最初のパスと最初のパスを比較するCyb5157.426からです。Cyb5610.425933重量スペース文字は無視する

この特殊な処理を回避するには、C文字コードポイント値のみに基づく順序でロケールを変更できます。

LC_ALL=C sort -d file

または@Swissが言ったように、最初のフィールドだけをソートします。

sort -d -k1,1 file

ただし、フィールド区切り文字は空白ではなく空白から空白への遷移であり、空白は空白です。はいフィールドに含まれます。

だから:

 b x
a x

sort -d -k1,1それでも次のようにソートされます。

a x
 b x

あなたのロケールではスペースが無視されるので、次のようになります。

 b x
a x

Cロケールでは、スペース文字が最初に続きますa

-bロケールに関係なく、先行スペースが常に無視されるようにオプションを追加できます。または、スペースで始まる行を最初に並べ替えるには、ロケールをCに変更します。

おすすめ記事