我的问题是如何比较两个单独文件中的两行?基本上我有两个文件,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