通讯:文件未按排序顺序

通讯:文件未按排序顺序

我曾经comm比较两个排序的文件。这些文件中的每一行都是正整数。但结果显示

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's 区域设置可能与区域设置不同sort,您可能需要在其环境中运行sortcommwithLC_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 的一种方法。

  • 对每个文件进行排序并将其通过管道传递给 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
    

相关内容