如何在unix中并排显示行号?

nom*_*a49 24 unix diff file sdiff

场景是我有两个文件,我想要使用以下命令并排编号:

diff -y file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

sdiff file1.txt file2.txt
Run Code Online (Sandbox Code Playgroud)

上面的命令只是打印并排差异,但不显示行号.有什么办法吗?我搜索了很多但找不到任何解决方案.我不能使用第三方工具FYI.任何人的天才想法?

更新:

我想要文件本身存在的文件编号而不是管道生成的行号到cat -n等.让我们说,我正在使用"--suppress-common-l ines"做差异然后行号应该是省略了没有在差异中显示的内容.

Uts*_*Uts 13

下面的代码可以用来显示两个文件中的不常见字段,并排显示.

sdiff -l file1 file2 | cat -n | grep -v -e '($'  
Run Code Online (Sandbox Code Playgroud)

下面的代码将显示公共字段以及输出中的行号.

diff -y file1 file2 | cat -n | grep -v -e '($'  
Run Code Online (Sandbox Code Playgroud)

您还可以访问https://unix.stackexchange.com/questions/34874/diff-output-line-numbers以获取其他格式.

  • @ Utsav:我想要文件本身的文件编号,而不是cat -n生成的行号.可以说,我正在使用"--suppress-common-lines"进行差异,然后应省略行号,这些行号未在diff中显示.行格式参数仅适用于-u.当与diff -y或sdiff一起使用时,它会出现"冲突"异常. (5认同)
  • diff --unchanged-line-format="" --old-line-format=":%dn: %L" --new-line-format=":%dn: %L" file1 file2 (2认同)

小智 6

sdiff -s <(cat -n file1.txt) <(cat -n file2.txt)
Run Code Online (Sandbox Code Playgroud)

这为您提供了来自文件的行号的并排输出。

  • 这不太理想,因为行编号是在 diff 之前应用的,这意味着添加/删除将导致 diff 认为行号是文件中的更改。例如,使用您的方法,带有“A/B/X/C/D”(其中“/”是换行符)的文件与“B/C/X/D”进行比较将显示除 X 更改之外的所有行,而理想情况下,它应该显示 X 移动且 A 被删除(其余部分保持不变)。 (4认同)

小智 6

以下命令将显示以 file1.txt 的行号为前缀的并排输出,并删除相同的行。

sdiff -l file1.txt file2.txt | cat -n | grep -v -e '($'
Run Code Online (Sandbox Code Playgroud)