通信:ファイルがソートされた順序ではありません

通信:ファイルがソートされた順序ではありません

一度はcomm、2つのソートされたファイルを比較したことがあります。このファイルの各行は正の整数です。しかし、結果は示されています

comm: file 1 is not in sorted order
comm: file 2 is not in sorted order

両方のファイルがソートされてもエラーが発生するのはなぜですか?

答え1

commsort数値ソート()ではなく、事前ソート(一般)が必要ですsort -n。たとえば、次の順序が必要です。

1
2000
300

次の順序ではありません。

1
300
2000

これを修正すると問題が解決します。commのロケールがlocaleと異なる可能性があるより難解な場合は、その環境内で実行してデフォルトのバイト順序を使用する必要がありますsortsortcommLC_COLLATE=C

答え2

ソートされたファイルを質問に貼り付けるか、ファイルのソート方法に関する洞察を得ることができます。ほとんどの場合、@ChrisDownの答えはうまくいきます。私の答えは、初心者が時々直面する可能性がある問題を解決します。

sort file1.txtソースファイルを変更せずにソートされた出力を印刷します。したがって、ソートを使用するときは、ファイルが実際にソートされていることを確認することが重要です。

これは以下に示す出力から明らかになります。

┌──(user㉿user)-[~/Desktop/abc]
└─$ sort no1.txt                  
26
67
789
98
                                                                                
┌──(user㉿user)-[~/Desktop/abc]
└─$ cat no1.txt
789
67
98
26

このソートはファイルのソートされた内容を提供しますが、ファイルの内容を見ると元のファイル自体が表示されます。 (元のtxtファイルについては、この回答の終わりを参照してください。)

ソートされたファイルをcommに渡す1つの方法は次のとおりです。

  • 各ファイルはソートされ、catにパイプされ、ソートされた内容で新しいファイルが生成されます。
  • 新しいファイルをcommに渡します。
┌──(user㉿user)-[~/Desktop/abc]
└─$ cat int1.txt
26
67
789
98
                                                                                
┌──(user㉿user)-[~/Desktop/abc]
└─$ sort no2.txt | cat > int2.txt
                                                                                
┌──(user㉿user)-[~/Desktop/abc]
└─$ comm int1.txt int2.txt
26
    45
        67
        789
    88
98

テキストファイル:

  • no1.txt
    789
    67
    98
    26
    
  • no2.txt
    789
    67
    45
    88
    

関連情報