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