如何比較兩個單獨文件中的兩行?

如何比較兩個單獨文件中的兩行?

我的問題是如何比較兩個單獨文件中的兩行?基本上我有兩個文件,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

相關內容