我想区分两批文件。如果我只是将它们放在两个不同的目录中并按目录进行比较,则比较将按字母顺序进行,这是我不想要的。
另一种方法是在 text1.txt 中列出文件并在 text2.txt 中列出文件:
文本1:
a1
b1
c1
文本2:
c2
a2
b2
我怎样才能做到这一点,这样我的循环将是:
diff a1 c2
diff b1 a2
diff b2 c1
在 bash 中,您可以使用-u
read 上的标志从不同的 fd 中读取。这使您可以并行读取两个文件:
while read -r -u3 file1 && read -r -u4 file2; do
diff "$file1" "$file2"
done 3<file1.txt 4<file2.txt
你可以使用paste
来加入这两个文件,然后一个 bash 循环来处理。
paste text1 text2 | while read file1 file2; do diff "$file1" "$file2"; done
另一个解决方案:
#!/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
此解决方案处理两个文件的行数不同的情况。