2017-03-01 16 views
1

私の同僚は、今日のsortコマンドで奇妙な動作に気付きました。このコマンドの出力が意図的であるかどうか誰にも分かりませんか?ファイル考えるBash sort -nuの結果が予期しない動作になる

ABC_22 
ABC_43 
ABC_1 
ABC_1 
ABC_43 
ABC_10 
ABC_123 

私たちは、数値ソートでファイルをソートし、また、それを一意にするために探しているので、我々は実行します。

sort file.txt -nu 

出力は次のようになります。

ABC_22 

ここでは、行が数字で始まらないので、数値ソートは機能しないことがわかりました。これは、より大きなスクリプトのほんの一部)ですが、私はの線に沿ってより多くの何かを期待していた:これはそうではありませんなぜ

ABC_1 
ABC_10 
ABC_123 
ABC_22 
ABC_43 

は誰もが知ってい

?ソートは、-uまたは-nオプションを個別に指定すると期待されるように動作します。 -n

答えて

1

あなたは

sort -nu -t'_' -k2 file 
ABC_1 
ABC_10 
ABC_22 
ABC_43 
ABC_123 

フラグとしてGNU sortの2番目のフィールド上のデ制限を指定して不足しているの-n数値ソートの場合は-uのユニークな行、のキーの部分はデリミタを_に設定し、_の後に2番目のフィールドをソートすると-k2となります。

1

an empty number is zero:ソート数値

。数字は各行から始まり、オプションの ブランク、オプションの ' - '記号、ゼロ桁またはそれ以上の数字(おそらく の小数点以下の桁と0桁以上の数字で区切られています)の桁区切りで区切られた で構成されます。空の数字は '0'として扱われる です。

すべてのこれらの行は、行の先頭に空の番号を持っているので、彼らはsortの数値の一意性のために、すべてゼロです。同じ番号の各行、たとえば1を開始した場合、効果は同じになります。あなたは明示的に数値を含むフィールドを指定、またはバージョンの並べ替え(-V)を使用する必要があります

$ sort -Vu foo 
ABC_1 
ABC_10 
ABC_22 
ABC_43 
ABC_123