一度はcomm
、2つのソートされたファイルを比較したことがあります。このファイルの各行は正の整数です。しかし、結果は示されています
comm: file 1 is not in sorted order
comm: file 2 is not in sorted order
両方のファイルがソートされてもエラーが発生するのはなぜですか?
答え1
comm
sort
数値ソート()ではなく、事前ソート(一般)が必要ですsort -n
。たとえば、次の順序が必要です。
1
2000
300
次の順序ではありません。
1
300
2000
これを修正すると問題が解決します。comm
のロケールがlocaleと異なる可能性があるより難解な場合は、その環境内で実行してデフォルトのバイト順序を使用する必要がありますsort
。sort
comm
LC_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