Bash 区分两批文件

Bash 区分两批文件,bash,diff,Bash,Diff,我想区分两批文件。如果我简单地将它们放在两个不同的目录中并按目录进行区分,比较将按字母顺序进行,这是我不希望看到的 另一种方法是在text1.txt中列出文件,在text2.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 fi

我想区分两批文件。如果我简单地将它们放在两个不同的目录中并按目录进行区分,比较将按字母顺序进行,这是我不希望看到的

另一种方法是在text1.txt中列出文件,在text2.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

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

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

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

while read -r -u3 file1 && read -r -u4 file2; do
  diff "$file1" "$file2"
done 3<file1.txt 4<file2.txt
读取-r-u3文件1和读取-r-u4文件2时;做
差异“$file1”$file2

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

while read -r -u3 file1 && read -r -u4 file2; do
  diff "$file1" "$file2"
done 3<file1.txt 4<file2.txt
读取-r-u3文件1和读取-r-u4文件2时;做
差异“$file1”$file2
完成3另一种解决方案:

#!/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
#/bin/bash
file1=“…”
file2=“…”
getSize(){
wc-l“$1”|切割-d”—f1
}
getValueFromLineNumber(){
sed-n“$1p”“$2”
}
diffFromLineNumber(){
f1=$(getValueFromLineNumber“$1”“$file1”)
f2=$(getValueFromLineNumber“$1”“$file2”)
差异“$f1”$f2”
}
#获取最小大小
[[$(getSize“$file1”)-le$(getSize“$file2”)]&&min=$s1 | | min=$s2
对于((i=1;i另一种溶液:

#!/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
!/bin/bash
file1=“…”
file2=“…”
getSize(){
wc-l“$1”|切割-d”—f1
}
getValueFromLineNumber(){
sed-n“$1p”“$2”
}
diffFromLineNumber(){
f1=$(getValueFromLineNumber“$1”“$file1”)
f2=$(getValueFromLineNumber“$1”“$file2”)
差异“$f1”$f2”
}
#获取最小大小
[[$(getSize“$file1”)-le$(getSize“$file2”)]&&min=$s1 | | min=$s2

对于((i=1;i非常好,它是一行。您知道如何包含不同的文件名吗?那将是perfect@Paolo我不确定你到底想要什么。你可以放一个
echo“DIFF:$file1,$file2”;
diff
命令之前,指示一组文件的diff开始。我想打印不同的文件名。这就是我要找的:在读取file1 file2时粘贴text1 text2;执行diff--简短的“$file1”$file2”;diff-y——抑制公共行$file1$file2;donevery nice,它是一行。您知道如何包含不同的文件名吗?这很简单perfect@Paolo我不确定你到底想要什么。你可以放一个
echo“DIFF:$file1,$file2”;
diff
命令之前,指示一组文件的diff开始。我想打印不同的文件名。这就是我要找的:粘贴text1 text2;读取file1 file2;do diff--short“$file1”“$file2”;diff-y--抑制公用行$file1$file2;完成