如何检查相同的文本是否出现在两个不同的文件中

如何检查相同的文本是否出现在两个不同的文件中

我想检查(技巧或任何快捷方式)文本字符串是否存在于两个文件中。

文件一的内容是

a.txt
b.txt
c.txt
d.txt

文件二的内容是

c.txt
a.txt
d.txt

如何检查文件一中的字符串是否与文件二中的字符串匹配?

答案1

命令

方法一:

for i in `cat p1`; do grep -i "$i" p2 >/dev/null; if [[ $? == 0 ]]; then echo "$i exsists in both files"; else echo "$i doesnt exsists in file p2"; fi; done

输出

a.txt exsists in both files
b.txt doesnt exsists in file p2
c.txt exsists in both files
d.txt exsists in both files

答案2

join,sortgrep

join <(sort /path/to/source) <(sort /path/to/destination) | grep '<string to check>

测试

cat source
a.txt
b.txt
c.txt
d.txt

cat destination
c.txt
a.txt
d.txt

join <(sort source) <(sort destination) | grep 'a.txt'
a.txt

join <(sort source) <(sort destination) | grep 'b.txt'

如果需要检查两个文件的内容是否不匹配,可以发出以下命令

cmp --silent <(sort source) <(sort destination) || echo "files are different"

测试

cmp --silent <(sort source) <(sort destination) || echo "files are different"
files are different

将源文件中未包含在目标文件中的所有行添加到 /var/tmp/unmatched 文件中

comm -23 <(sort source) <(sort destination) > /var/tmp/unmatched

从源文件中删除目标文件中不包含的所有行

comm -1 <(sort source) <(sort destination) >| source

由于我们使用的是 bash,并且如果您已将 noclobber 设置为set -o noclobber,那么您应该使用语法>|

答案3

使用下面的 awk 命令完成

f2count=`awk 'END{print NR}' p2`
f1count=`awk 'END{print NR}' p1 `
comm_p1_p2=`awk 'NR==FNR{a[$0];next}($0 in a){print $0}' p1 p2| awk 'END{print NR}'`

if [[ $f1count -eq $f2count ]] && [[ $f1count -eq $comm_p1_p2 ]]; then echo "both files p1  and p2 content are same"; else echo "different content found on file p1  and p2"; fi

相关内容