这是关于linux命令行上的comm
命令的问题。
为什么它仅适用于已排序的文件?为什么不能为我们排序文件,然后做它的事情?为了说明:如果我们有file1
和file2
,并且我们希望使用comm
对它们进行比较,我们发现如果两个文件中的任何一个未排序,我们就会获得意外的结果。为什么创建者添加了强制参数为SORTED文件的限制?
这看起来很不方便,我想创建一个shell脚本来替换这个默认的comm
。
我的问题是:为什么我不应该更换它?使用comm
来限制这个限制是一件好事,就像我们可以在c ++程序中添加const
一样,这是不必要的,但被认为是一种好的做法?
感谢。
答案 0 :(得分:3)
此设计使comm
程序简单,只需比较文件即可。如果它还必须对文件进行排序,那么sort
命令的复杂性将大大增加,包括如果内容不适合内存则需要临时文件。如果文件已经排序,这将是不必要的。基本的Unix哲学是每个命令应该做一件事,或者根据选项做一些事情的变化,你应该将它们结合起来以满足更复杂的需求。
您可以在比较文件之前使用进程替换对文件进行排序。
comm <(sort file1) <(sort file2)