2017-09-02 3 views
-1

私はsortingnames.txtという名前のテキストファイルを持っています。これはcatコマンドの下にあります。この特定のケースでソートコマンドはどのように機能しますか?

A. Thaliana 
E. Coli 
H. sapiens 
S. cerevisiae 
A thaliana 
E Coli 
H sapiens 
S cerevisiae 
A. Thaliana (plant) 
E. Coli (Bacteria) 
H. Sapiens (Human) 
S. Cerevisiae (Yeast) 
203 characters? 
A. Thaliana Plant 

次に、sortコマンド$ sort -k 3.2 sortingnames.txtを実行します。 このように結果がポップアップします。

203 characters 
A thaliana 
A. Thaliana 
E Coli 
E. Coli 
H sapiens 
H. sapiens 
S cerevisiae 
S. cerevisiae 
E. Coli (Bacteria) 
H. Sapiens (Human) 
A. Thaliana (plant) 
A. Thaliana Plant 
S. Cerevisiae (Yeast) 

最後の5行の順序はわかりません。 coli(細菌)の第3文字はcであり、次の(人間)はmであると考えられます。植物系統の3番目の文字はaであり、酵母系統は3番目の文字はaです。

そして、まだbashの戻りこの

+0

あなたのロケールは何ですか? 'locale'は何を出力しますか? – Kusalananda

+2

'-k 3.2'は「文字2から始まる3番目のフィールド」を意味します。それは何かの3番目の文字を選択しません。 –

+0

ロケールLANG = EN_US.UTF-8 LC_CTYPE = "EN_US.UTF-8" LC_NUMERIC = "EN_US.UTF-8" LC_TIME = "EN_US.UTF-8" LC_COLLATE = "EN_US.UTF-8" を出力します LC_MONETARYは= "EN_US.UTF-8" LC_MESSAGES = "EN_US.UTF-8" LC_PAPER = "EN_US.UTF-8" LC_NAME = "EN_US.UTF-8" LC_ADDRESS = "EN_US.UTF-8" LC_TELEPHONE = "EN_US.UTF-8" LC_MEASUREMENT = "EN_US.UTF-8" LC_IDENTIFICATION = "EN_US.UTF-8" LC_ALL = –

答えて

0

en_US.UTF-8に関連する照合順序の問題のように見える理由を誰かが説明することができます。この場合、左かっこ - 。?は。(は - 効果的に見て、最後の5行を残して無視されます以下のような:あなたは-k3.2を適用すると

E. Coli Bacteria) 
H. Sapiens Human) 
A. Thaliana plant) 
A. Thaliana Plant 
S. Cerevisiae Yeast) 

だから... ...続けますあなたは、大文字と小文字を区別しないソート順を考えると小文字が持つ、

' Bacteria)' 
' Human)' 
' plant)' 
' Plant' 
' Yeast)' 

そして:心の中でINGの先頭の空白文字がカウントに含まです...あなたは、次のソート結果を残しています優先度は大文字以上です...結果は正しいです... en_US.UTF-8です。

LANG変数を変更してみてください(例:unset LANG)。私のSLES環境では、すべてのLC_*の変数は「POSIX」に切り替える、と私は再びソートを実行したときに、私は-k3.2を適用するときに私が取得今ソート文字列の一部として考えられている左括弧を見つける:

' (Bacteria) 
' (Human) 
' (Yeast) 
' (plant) 
' Plant 

...このケースでは、左のparenが文字よりも優先され、大文字が小文字よりも優先される大文字と小文字の区別があります。LANG=(そしてさまざまなLC_*の変数= "POSIX")

+0

私はこの本についてもっと知ることができる本やウェブサイトがあるか教えてくれますか?ありがとう! –

関連する問題