我有两个文件,其中一些行已更改顺序。我希望能够比较这些。
一个网站建议的内容如下:
diff <(sort text2) <(sort text1)
但是这会产生错误:缺少重定向的名称。
我正在使用tcsh。以上命令是针对不同的shell吗?
有更好的方法吗?
答案 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)