差异两批文件

时间:2013-10-29 22:13:17

标签: bash diff

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

另一种方法是列出text1.txt中的文件和text2.txt中的列表文件:

的text1:

a1
b1
c1

text2的:

c2
a2
b2

我该如何解决这个问题,我的循环将是:

diff a1 c2
diff b1 a2
diff b2 c1

3 个答案:

答案 0 :(得分:2)

您可以使用paste加入这两个文件,然后使用bash循环进行处理。

paste text1 text2 | while read file1 file2; do diff "$file1" "$file2"; done

答案 1 :(得分:2)

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

while read -r -u3 file1 && read -r -u4 file2; do
  diff "$file1" "$file2"
done 3<file1.txt 4<file2.txt

答案 2 :(得分: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

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