我想分兩批文件。如果我簡單地將它們放在兩個不同的目錄中並按目錄進行比較,則比較將按照字母順序排列,這是我不想要的。diff兩批文件
另一種方法是列出text2.txt在text1.txt和列表文件的文件:
文本1:
a1
b1
c1
文本2:
c2
a2
b2
我怎樣才能接近這個使我的循環將是:
diff a1 c2
diff b1 a2
diff b2 c1
我想分兩批文件。如果我簡單地將它們放在兩個不同的目錄中並按目錄進行比較,則比較將按照字母順序排列,這是我不想要的。diff兩批文件
另一種方法是列出text2.txt在text1.txt和列表文件的文件:
文本1:
a1
b1
c1
文本2:
c2
a2
b2
我怎樣才能接近這個使我的循環將是:
diff a1 c2
diff b1 a2
diff b2 c1
您可以使用paste
加入這兩個文件,然後使用bash循環進行處理。
paste text1 text2 | while read file1 file2; do diff "$file1" "$file2"; done
在bash中,你可以使用閱讀-u
標誌從不同的FD閱讀。這使您可以從兩個文件並行讀取:
while read -r -u3 file1 && read -r -u4 file2; do
diff "$file1" "$file2"
done 3<file1.txt 4<file2.txt
'+ 1'只是因爲文件描述符很酷。 ':)' –
另一種解決方案:
#!/bin/bash
file1="..."
file2="..."
getSize(){
wc -l "$1"|cut -d " " -f1
}
getValueFromLineNumber(){
sed -n "$1p" "$2"
}
diffFromLineNumber(){
f1=$(getValueFromLineNumber "$1" "$file1")
f2=$(getValueFromLineNumber "$1" "$file2")
diff "$f1" "$f2"
}
# get min size
[[ $(getSize "$file1") -le $(getSize "$file2") ]] && min=$s1 || min=$s2
for ((i=1 ; i <= "$min" ; i++)); do
diffFromLineNumber "$i"
done
這種解決方案需要在兩個文件不具有相同的行數的情況下照顧。
非常好,它是一個班輪。你碰巧知道如何包含被擴散的文件名?這將是完美的 – Paolo
@Paolo我不確定你到底在問什麼。你可以在'diff'命令之前加一個'echo'DIFF:$ file1,$ file2「;'來表示一組文件的差異的開始。 –
我想打印diff文件名。這就是我正在尋找的東西:paste text1 text2 |同時讀取file1 file2; do diff --brief「$ file1」「$ file2」; diff -y --suppress-common-lines $ file1 $ file2;完成 – Paolo