文件A和文件B分别存放着两组数,现要求出两组数的交集。
文件格式是每个数字占一行。
如,文件A为: 文件B为:
12 23
23 32
45 56
56
则交集应该为:
23
56
这里主要是学习diff这个命令的用途。
diff,比较文件,它是通过逐行比较两个文本文件的方式来找到两者不同的地方的。
输出结果中,以<开头的是属于第一个参数指定的文件的,以>开头的是属于第二个参数指定的文件的。
通过grep命令得到以<开头的即属于第一个文件但不属于第二个文件的行,并输出到一个临时文件中。
再以第一个文件与这个临时文件用diff来比较,同样方法,得到的就是两个文件的交集了。
要注意,比较的两个文件必须先进行排序。
如下:
[~/diff]# cat a.txt
12
23
45
56
[~/diff]# cat b.txt
23
32
56
[~/diff]# diff a.txt b.txt |grep -r "<" //管道输入到c.txt,去掉<
< 12
< 45
c.txt:
12
45
到C文件!
[~/diff]# diff a.txt c.txt |grep -r "<"
< 23
< 56
结果是:
23
56
代码页可以,如此啊:
改写测试成功,如下,加入dos2unix,很重要!
dos2unix diff.sh 这个命令运行一下。
亲自实践:
特别提醒:Linux与Windows文本格式之间的转化,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"\r\n"转化成"\n",unix2dos把"\n"转化成"\r\n"。
不做如上操作,diff会出现问题!!!!!
diff antacardsort.txt anta_userqq_onlinesort.txt|grep "<"|awk -F"< " '{print $2}' > a.txt
sort a.txt >> aa.txt
diff antacardsort.txt asort.txt |grep "<"|awk -F"< " '{print $2}' > diffresultA.txt
diff antacardsort.txt anta_userqq_onlinesort.txt|grep ">"|awk -F"> " '{print $2}' > b.txt
sort b.txt >> bb.txt
diff anta_userqq_onlinesort.txt bb.txt |grep "<"|awk -F"< " '{print $2}' > diffresultB.txt
结果:
diffresultA.txt == diffresultB.txt
自己务必参考:http://www.jackxiang.com/post/1370/
来源:http://www.gdutbbs.com/thread-76831-1-1.html
文件格式是每个数字占一行。
如,文件A为: 文件B为:
12 23
23 32
45 56
56
则交集应该为:
23
56
这里主要是学习diff这个命令的用途。
diff,比较文件,它是通过逐行比较两个文本文件的方式来找到两者不同的地方的。
输出结果中,以<开头的是属于第一个参数指定的文件的,以>开头的是属于第二个参数指定的文件的。
通过grep命令得到以<开头的即属于第一个文件但不属于第二个文件的行,并输出到一个临时文件中。
再以第一个文件与这个临时文件用diff来比较,同样方法,得到的就是两个文件的交集了。
要注意,比较的两个文件必须先进行排序。
如下:
[~/diff]# cat a.txt
12
23
45
56
[~/diff]# cat b.txt
23
32
56
[~/diff]# diff a.txt b.txt |grep -r "<" //管道输入到c.txt,去掉<
< 12
< 45
c.txt:
12
45
到C文件!
[~/diff]# diff a.txt c.txt |grep -r "<"
< 23
< 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 "$@"
# 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 "$@"
改写测试成功,如下,加入dos2unix,很重要!
#######################################
# 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`
dos2unix $1
dos2unix $2
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 "$@"
# 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`
dos2unix $1
dos2unix $2
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 "$@"
dos2unix diff.sh 这个命令运行一下。
亲自实践:
特别提醒:Linux与Windows文本格式之间的转化,Linux提供了两种文本格式相互转化的命令:dos2unix和unix2dos,dos2unix把"\r\n"转化成"\n",unix2dos把"\n"转化成"\r\n"。
不做如上操作,diff会出现问题!!!!!
diff antacardsort.txt anta_userqq_onlinesort.txt|grep "<"|awk -F"< " '{print $2}' > a.txt
sort a.txt >> aa.txt
diff antacardsort.txt asort.txt |grep "<"|awk -F"< " '{print $2}' > diffresultA.txt
diff antacardsort.txt anta_userqq_onlinesort.txt|grep ">"|awk -F"> " '{print $2}' > b.txt
sort b.txt >> bb.txt
diff anta_userqq_onlinesort.txt bb.txt |grep "<"|awk -F"< " '{print $2}' > diffresultB.txt
diff antacardsort.txt asort.txt |grep ^\< | awk '{print $2}'
和
diff antacardsort.txt asort.txt |grep "<"|awk -F"< " '{print $2}'
一个意思!
和
diff antacardsort.txt asort.txt |grep "<"|awk -F"< " '{print $2}'
一个意思!
结果:
diffresultA.txt == diffresultB.txt
自己务必参考:http://www.jackxiang.com/post/1370/
来源:http://www.gdutbbs.com/thread-76831-1-1.html
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3484/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2020-12-1 16:33
评论列表