hjack 发表于 2006-7-16 21:18

[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 "$@"



迟点再补上程序的解释。

hjack 发表于 2006-7-21 22:09

这里主要是学习diff这个命令的用途。

diff,比较文件,它是通过逐行比较两个文本文件的方式来找到两者不同的地方的。

输出结果中,以<开头的是属于第一个参数指定的文件的,以>开头的是属于第二个参数指定的文件的。

通过grep命令得到以<开头的即属于第一个文件但不属于第二个文件的行,并输出到一个临时文件中。

再以第一个文件与这个临时文件用diff来比较,同样方法,得到的就是两个文件的交集了。

要注意,比较的两个文件必须先进行排序。
页: [1]
查看完整版本: [SHELL we talk 之五]求两个文件的交集