[SHELL we talk 之五]求两个文件的交集
文件A和文件B分别存放着两组数,现要求出两组数的交集。文件格式是每个数字占一行。
如,文件A为: 文件B为:
12 23
23 32
45 56
56
则交集应该为:
23
56
#######################################
#author:hjack
#Date:2006.7.16
#function:找两个文件中数的交集
#usage:intersection file1 file2
#History:
#######################################
usage(){
echo "Usage:$0 file1 file2"
exit 1;
}
testInput(){
REQUESTARG=2
if [ $# -ne $REQUESTARG ]; then
Usage "$@"
fi
}
getIntersection(){
seed=`date +%s`
sort $1 -un > /tmp/$1.$seed
sort $2 -un > /tmp/$2.$seed
diff /tmp/$1.$seed /tmp/$2.$seed | grep ^\< | awk '{print $2}' > /tmp/$1.$seed.only
diff /tmp/$1.$seed /tmp/$1.$seed.only | grep ^\< | awk '{print $2}'
}
main(){
testInput "$@"
getIntersection "$@"
}
main "$@"
迟点再补上程序的解释。 这里主要是学习diff这个命令的用途。
diff,比较文件,它是通过逐行比较两个文本文件的方式来找到两者不同的地方的。
输出结果中,以<开头的是属于第一个参数指定的文件的,以>开头的是属于第二个参数指定的文件的。
通过grep命令得到以<开头的即属于第一个文件但不属于第二个文件的行,并输出到一个临时文件中。
再以第一个文件与这个临时文件用diff来比较,同样方法,得到的就是两个文件的交集了。
要注意,比较的两个文件必须先进行排序。
页:
[1]