遺伝子名と発現値でファイルをソートしています。すべてのファイルの正確な行数は同じですが、ソート後のいくつかの遺伝子の位置に違いがあります。これはとても奇妙です。以下は、これら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
ができます。apiary
Arrival
ここでは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に変更します。
答え2
私は現在行全体をソートしていますが、最初の列だけをソートしたいようです。現在のコマンドの作成方法に応じて、列はデフォルトで一緒にリンクされます。たとえば、次のようになります。
Cyb5 157.426 -> Cyb5157426
Cyb561 0.425933 -> Cyb5610425933
そして
Cyb561 7.11003 -> Cyb561711003
Cyb5 64.074 -> Cyb564074
最初の列のみをソートするには、次のコマンドを使用する必要があります。
sort -d -k1,1