在两个文件之间进行排序差异的简单方法是什么?

时间:2009-04-03 15:21:28

标签: unix shell

我有两个文件,其中一些行已更改顺序。我希望能够比较这些。

一个网站建议的内容如下:

diff <(sort text2) <(sort text1)

但是这会产生错误:缺少重定向的名称。

我正在使用tcsh。以上命令是针对不同的shell吗?

有更好的方法吗?

6 个答案:

答案 0 :(得分:49)

此重定向语法是特定于bash的。因此它在tcsh中不起作用。

您可以调用bash并直接指定命令:

bash -c 'diff <(sort text2) <(sort text1)'

答案 1 :(得分:13)

这是一个功能:

function diffs() {
        diff "${@:3}" <(sort "$1") <(sort "$2")
}

这样称呼:

diffs file1 file2 [other diff args, e.g. -y]

如果有必要,大概你可以根据David Schmitt的回答改变它。

答案 2 :(得分:3)

如果这对你的shell不起作用,只需要用3行代码:

sort text1 > text1.sorted
sort text2 > text2.sorted
diff text1.sorted text2.sorted

简单但应该有用......

答案 3 :(得分:2)

  

有更好的方法吗?

是的,有。

使用comm实用程序:

  

用法:通讯[-123i] file1 file2

答案 4 :(得分:1)

发布的'差异'问题是diff只能通过stdin接收一个文件。所以我认为你必须将至少一个已排序的文件写入临时文件。

diff - file.txt

将diff stdin与file.txt相对应。 ' - '代表stdin

编辑:我假设进程替换可以通过stdin工作。但情况并非如此,上面的内容是通过上面的VardhanDotNet指出的/dev/fd/{num}进行的。

答案 5 :(得分:1)

fish外壳中,

diff (sort a.txt | psub) (sort b.txt | psub)