Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何显示两个文件之间的合并差异?_Bash_Diff - Fatal编程技术网

Bash 如何显示两个文件之间的合并差异?

Bash 如何显示两个文件之间的合并差异?,bash,diff,Bash,Diff,我怎样才能得到两个文件之间的差异字母 比如说, 文件1: 文件2: 在diff之后,我应该只从第二个文件中获得这个差异字符串:A05对于给定的示例, 您可以逐个字符比较文件,如果有差异,则打印第二个文件的字符。有一种方法可以做到这一点: paste <(fold -w1 file1) <(fold -w1 file2) | \ while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done 粘贴对于给定的示例, 您可以逐个字符比较文

我怎样才能得到两个文件之间的差异字母

比如说,

文件1:

文件2:

在diff之后,我应该只从第二个文件中获得这个差异字符串:
A05

对于给定的示例, 您可以逐个字符比较文件,如果有差异,则打印第二个文件的字符。有一种方法可以做到这一点:

paste <(fold -w1 file1) <(fold -w1 file2) | \
while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done
粘贴对于给定的示例,
您可以逐个字符比较文件,如果有差异,则打印第二个文件的字符。有一种方法可以做到这一点:

paste <(fold -w1 file1) <(fold -w1 file2) | \
while read c1 c2; do [[ $c1 = $c2 ]] || printf $c2; done
粘贴
我们只对每行的最后一个字符感兴趣。我们使用sed放弃其余部分:

$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) |
> sed 's/.*\(.\)$/\1/'
A
0
5

如果您可以使用GNU diffutils,另一种选择是
cmp

$ cmp -lb file1 file2 | awk '{print $5}' | tr -d '\n'
A05
cmp
逐字节比较文件。
-l
选项(“verbose”)使其打印所有差异,而不仅仅是第一个差异;
-b
选项使其添加不同字节的ASCII解释:

$ cmp -lb file1 file2
 2 141 a    101 A
18  65 5     60 0
34  61 1     65 5
awk命令将此输出减少到第五列,并且
tr
删除换行符

我们只对每行的最后一个字符感兴趣。我们使用sed放弃其余部分:

$ diff -y --suppress-common-lines <(fold -w 1 file1) <(fold -w 1 file2) |
> sed 's/.*\(.\)$/\1/'
A
0
5

如果您可以使用GNU diffutils,另一种选择是
cmp

$ cmp -lb file1 file2 | awk '{print $5}' | tr -d '\n'
A05
cmp
逐字节比较文件。
-l
选项(“verbose”)使其打印所有差异,而不仅仅是第一个差异;
-b
选项使其添加不同字节的ASCII解释:

$ cmp -lb file1 file2
 2 141 a    101 A
18  65 5     60 0
34  61 1     65 5
awk命令将此输出减少到第五列,并且
tr
删除换行符

$ cmp -lb file1 file2
 2 141 a    101 A
18  65 5     60 0
34  61 1     65 5