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