iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >shell两个文件去重的多种姿势
  • 955
分享到

shell两个文件去重的多种姿势

姿势多种两个 2022-06-04 21:06:41 955人浏览 安东尼
摘要

前言 大家都知道shell在文本处理上确有极大优势,比如多文本合并、去重等,但是最近遇到了一个难搞的问题,即两个大数据量文件去重。下面来看看详细的介绍吧。 要求 有txt文件A.txt和B.txt。 其中

前言

大家都知道shell在文本处理上确有极大优势,比如多文本合并、去重等,但是最近遇到了一个难搞的问题,即两个大数据量文件去重。下面来看看详细的介绍吧。

要求

有txt文件A.txt和B.txt。

其中A为关键词和搜索量,以逗号分隔,约90万行。

B为关键词,约400万行。

需要从A中找出与B重复的关键词。

我试了N种姿势,但结果都不尽人意,最奇怪的是有些方法对小数据量的测试文件有用,一旦用在A与B上就会失败,真叫人百思不得其解。

姿势一:


awk -F, '{print $1}' A >keyWords.txt
cat keywords.txt B.txt | sort | uniq -d
 
#先从A.txt种取出关键词,然后与B.txt一起打开,用sort排序,uniq -d 取出重复的行

姿势二:


awk -F, '{print $1}' A >keywords.txt
#照例先取出关键词
 
comm -1 -2 keywords.txt B.txt
#利用comm命令,显示两个文件都存在的行

姿势三:


awk -F, '{print $1}' A >keywords.txt
for i in `cat keywords.txt`
do
  A=`egrep -c "^$i$" B.txt`
  if [ $A != 0 ]
  then
    echo $i >>重复关键词.txt
  fi
done
 
#这种姿势就稍微复杂点
#首先取出关键词,然后利用for循环逐个去B.txt里面匹配(注意正则写法^$i$),如果匹配到的结果数不为0,说明这个关键词是重复的,然后输出
#这种方法的优点是稳妥,缺点是效率太TM低了,90万个词逐一与400万词匹配,shell默认又没有多线程,耗时太长。

姿势四:


awk -F, '{print $1}' A >keywords.txt
cat keywords.txt B.txt | awk '!a[$1]++'
 
#这个方法的原理其实我不太懂,awk命令实在太强大太高深了,但是这种方法又简洁又快速

其实还有一种grep -v 、grep -f 的方法,但是我没有试过,所以不在这里列出了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

--结束END--

本文标题: shell两个文件去重的多种姿势

本文链接: https://www.lsjlt.com/news/18992.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作