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

mmc*_*coo 34 unix shell

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

一个网站建议看起来像这样:

diff <(sort text2) <(sort text1)
Run Code Online (Sandbox Code Playgroud)

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

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

有没有更好的办法?

Dav*_*itt 52

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

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

bash -c 'diff <(sort text2) <(sort text1)'
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的提示,但我不完全理解它的工作原理.你能解释用"bash -c"包装它是如何使重定向工作的吗? (2认同)
  • 如果你现在的 shell 不是 `bash`,那么用 `bash -c` 包装是必要的。 (2认同)
  • 消息“意外标记附近的语法错误”的原因可能是 `&lt;` 和 `(`,即 `diff &lt; (sort text2) ...` 而不是 `diff &lt;(sort text2) 之间有空格。 ..`. 删除空间后,该命令起作用了。 (2认同)

haj*_*mie 13

这是一个功能:

function diffs() {
        diff "${@:3}" <(sort "$1") <(sort "$2")
}
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

diffs file1 file2 [other diff args, e.g. -y]
Run Code Online (Sandbox Code Playgroud)

据推测,如果有必要,你可以根据David Schmitt的回答改变它.


Mat*_*ARD 5

如果这对您的 shell 不起作用,只需在 3 行中执行:

sort text1 > text1.sorted
sort text2 > text2.sorted
diff text1.sorted text2.sorted
Run Code Online (Sandbox Code Playgroud)

简单但应该工作......


Iva*_*hov 5

有没有更好的办法?

就在这里。

使用comm工具:

用法:comm [-123i] file1 file2

  • 来自手册页: _Comm 实用程序假定文件是按词法排序的;所有字符都参与行比较。_ (6认同)

mha*_*sen 5

fish外壳中,

diff (sort a.txt | psub) (sort b.txt | psub)
Run Code Online (Sandbox Code Playgroud)