如何比较两个单独文件中的两行?

如何比较两个单独文件中的两行?

我的问题是如何比较两个单独文件中的两行?基本上我有两个文件,file1 包含一行:

${X##*a}

file2 包含一行:

baaabaabab

我尝试过的是:

diff -u file1 file2 > file3

但这并没有给出aaaa应有的结果。此外,两个文件并不总是相同,但差异总是在行的开头。


我修改了我的程序,现在我有两个变量,一个带有aaaabaaabaabab,一个带有a.现在我可以执行以下操作:

echo ${var1##*$var2} > tempfile.txt

临时文件包含baaabaabab.但我怎样才能得到aaaa呢?我在想:

echo ${var1//*$var2} > tempfile.txt

但这不起作用。

答案1

diff以每行为基础工作。因此,如果行哪怕只有一个字符不同,diff 也会认为它们是不同的。

在您的情况下,您可以做的一件事是转换输入数据,使每个字符都在自己的行上。该fold命令对此有所帮助。所以你可以这样做:

$ diff <(fold -w1 file1) <(fold -w1 file2)
1,4d0
< a
< a
< a
< a
$ 

仅当您的输入文件确实每个文件只有一行时,这才有效。

我不知道这个输出格式对你是否有用。如果您确实想要“aaaa”字符串,并且绝对可以保证差异是仅有的在输入行的一处,然后您可以通过以下方式传输上述输出awk

$ diff <(fold -w1 file1) <(fold -w1 file2) | awk '/^< / { printf $2 }'
aaaa$ 
$

答案2

以下是使用 perl 从第一个文件的内容中删除第二个文件的内容,然后将第一个文件中的剩余内容打印到输出文件的方法:

perl -e '$x=<>; $y=<>; $x=~s/$y//; print $x' 1.txt 2.txt > out.txt

相关内容