校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > shell兩個文件去重的多種姿勢

shell兩個文件去重的多種姿勢

熱門標簽:測繪地圖標注名稱 德陽400電話申請 天津電話外呼系統排名 怎么在百度地圖標注公司的位置 百度地圖標注直線距離 外呼電話系統怎么操作 鶴崗400電話申請 智能電銷機器人有用嗎 商機地圖標注

前言

大家都知道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 -vgrep -f 的方法,但是我沒有試過,所以不在這里列出了。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

您可能感興趣的文章:
  • 判斷文件是否存在的shell腳本代碼
  • Shell逐行讀取文件的4種方法
  • shell去掉文件中空行(空白行)的方法詳解
  • shell腳本中執行時提示“沒有那個文件或目錄”的解決辦法
  • shell按行讀取文件的3種方法
  • Shell腳本統計文件行數的8種方法
  • Shell獲取文件的文件名和擴展名的例子
  • Shell中調用、引用、包含另一個腳本文件的三種方法
  • shell判斷文件,目錄是否存在或者具有權限的代碼
  • shell中刪除文件中重復行的方法

標簽:百色 鎮江 武漢 滁州 優質小號 六盤水 自貢 丹東

巨人網絡通訊聲明:本文標題《shell兩個文件去重的多種姿勢》,本文關鍵詞  shell,兩個,文件,去,重的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《shell兩個文件去重的多種姿勢》相關的同類信息!
  • 本頁收集關于shell兩個文件去重的多種姿勢的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 抚松县| 乌海市| 巴彦淖尔市| 罗江县| 浦东新区| 合川市| 乐平市| 大冶市| 三穗县| 吉安县| 宜君县| 湖北省| 武义县| 赤壁市| 仁布县| 利津县| 石城县| 平定县| 礼泉县| 井研县| 公主岭市| 建昌县| 瑞金市| 巴塘县| 武邑县| 永嘉县| 太和县| 宁乡县| 富民县| 朝阳市| 中西区| 迁西县| 凤山市| 兴海县| 碌曲县| 阿尔山市| 镇雄县| 滨海县| 正阳县| 邳州市| 威远县|