Linux 在unix中复制两个文件之间的差异

Linux 在unix中复制两个文件之间的差异,linux,bash,unix,Linux,Bash,Unix,首先,哪一个unix命令最好、最快,只获取两个文件之间的差异?我试着用diff来做这件事(如下) 我试过Neilvert Noval在这里给出的答案- 代码- diff -a --suppress-common-lines -y file1.txt file2.txt >> file3.txt 但是,在不同的行之前,我得到了很多空格和一个>符号。我该如何解决这个问题?我正在考虑删除尾随空格和第一个“>”,但不确定这是否是一个好的解决方案 我的file1.txt已- Hello Wo

首先,哪一个unix命令最好、最快,只获取两个文件之间的差异?我试着用diff来做这件事(如下)

我试过Neilvert Noval在这里给出的答案-

代码-

diff -a --suppress-common-lines -y file1.txt file2.txt >> file3.txt
但是,在不同的行之前,我得到了很多空格和一个>符号。我该如何解决这个问题?我正在考虑删除尾随空格和第一个“>”,但不确定这是否是一个好的解决方案

我的file1.txt已-

Hello World!
Its such a nice day!
#this is a newline and not a line of text# 
Hello World!
Its such a nice day!
Glad to be here!
#this is a newline and not a line of text# 
我的file1.txt已-

Hello World!
Its such a nice day!
#this is a newline and not a line of text# 
Hello World!
Its such a nice day!
Glad to be here!
#this is a newline and not a line of text# 
输出-“#这里有很多空格#>很高兴来到这里:)”


预期输出-很高兴来到这里:)

获得差异的另一种方法是使用awk:

awk 'FNR==NR{a[$0];next}!($0 in a)' file1 file2

尽管我必须承认,我没有运行任何基准测试,也不能说哪一个是最快的解决方案。

另一种获得差异的方法是使用awk:

awk 'FNR==NR{a[$0];next}!($0 in a)' file1 file2

尽管我必须承认,我没有运行任何基准测试,也不能说哪一个是最快的解决方案。

diff的
-y
选项使其产生“并排”的diff,这就是为什么有空格。请尝试
-u0
,以获得具有零行上下文的统一格式。应打印:

+Glad to be here:)

加号表示添加了该行,而减号表示删除了该行。

-ydiff选项使其产生“并排”的diff,这就是为什么有空格。请尝试
-u0
,以获得具有零行上下文的统一格式。应打印:

+Glad to be here:)
diff -a --suppress-common-lines -y file1.txt file2.txt|tr 'a >' '' |awk '{print $1}' >>file3.txt 


加号表示行被添加,而减号表示行被删除。

您在第二个答案中看到
comm
命令了吗?@squiguy-是的,但这会对文本进行排序。我不想对文本中的差异进行排序。我希望它保持原样。
diff-u
是显示文本文件差异的通用方法,大多数开发人员都很熟悉,并且得到了工具的广泛支持。是否只希望第二个文件中的行在第一个文件中不存在?重复的行如何?如果
diff
的输出不可接受,则必须显示所有情况下的输出预期:1)文件1中存在行,但文件2中缺少行;2) 文件1中缺失,但文件2中存在;3) 行出现在两个文件中,但在一个或多个字符中不同。您是否看到第二个答案中的
comm
命令?@squiguy-是,但这会对文本进行排序。我不想对文本中的差异进行排序。我希望它保持原样。
diff-u
是显示文本文件差异的通用方法,大多数开发人员都很熟悉,并且得到了工具的广泛支持。是否只希望第二个文件中的行在第一个文件中不存在?重复的行如何?如果
diff
的输出不可接受,则必须显示所有情况下的输出预期:1)文件1中存在行,但文件2中缺少行;2) 文件1中缺失,但文件2中存在;3) 行出现在两个文件中,但在一个或多个字符中不同。您可以在internet上搜索一些在两个文件中查找差异的基准。顺便问一下,您能解释fnr的含义吗,nr等。我是第一次看到这个awk。有没有办法让这个脚本在显示差异之前打印一个换行符?请参阅这个答案以了解有关awk的信息是的,它可以打印新行。使用此命令:
awk'BEGIN{print”“}FNR==NR{a[$0];next}!(a中的$0)'file1 file2
btw,如何在脚本文件中将这一行代码拆分为多行?尝试而且犯了很多错误。谢谢。你可以在互联网上搜索一些在2个文件中发现差异的基准。顺便说一句,你能解释一下fnr、nr等的含义吗。我是第一次看到这个awk。有没有办法让这个脚本在显示差异之前打印一个换行符?请参阅这个答案了解awk的信息是的,它可以打印新行符。使用此命令:
awk'BEGIN{print”“}FNR==NR{a[$0];next}!(a中的$0)'file1 file2
btw,如何在脚本文件中将这一行代码拆分为多行?尝试而且犯了很多错误。谢谢。附加大量不必要的数据…日期等。附加大量不必要的数据…日期等。由于这可能会解决问题,请提供有关如何解决问题以及原因的其他信息。由于这可能会解决问题,请提供有关如何解决问题以及原因的其他信息。
diff -a --suppress-common-lines -y file1.txt file2.txt|tr 'a >' '' |awk '{print $1}' >>file3.txt