0

我想区分两批文件。如果我只是将它们放在两个不同的目录中并按目录进行比较,则比较将按字母顺序进行,这是我不想要的。

另一种方法是在 text1.txt 中列出文件并在 text2.txt 中列出文件:

文本1:

a1
b1
c1

文本2:

c2
a2
b2

我怎样才能做到这一点,这样我的循环将是:

diff a1 c2
diff b1 a2
diff b2 c1
4

3 回答 3

2

在 bash 中,您可以使用-uread 上的标志从不同的 fd 中读取。这使您可以并行读取两个文件:

while read -r -u3 file1 && read -r -u4 file2; do
  diff "$file1" "$file2"
done 3<file1.txt 4<file2.txt
于 2013-10-29T22:31:36.627 回答
2

你可以使用paste来加入这两个文件,然后一个 bash 循环来处理。

paste text1 text2 | while read file1 file2; do diff "$file1" "$file2"; done
于 2013-10-29T22:21:40.373 回答
0

另一个解决方案:

#!/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

此解决方案处理两个文件的行数不同的情况。

于 2013-10-29T22:49:44.657 回答