亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

shell兩個(gè)文件去重的多種姿勢(shì)

 更新時(shí)間:2016年12月19日 14:14:07   作者:林間  
最近在利用shell幫公司優(yōu)化挖掘關(guān)鍵詞的流程,用shell替代了多個(gè)環(huán)節(jié)的操作,極大提高了工作效率。下面這篇文章就給大家分享了利用shell實(shí)現(xiàn)兩個(gè)文件去重的多種姿勢(shì),有需要的朋友們可以參考借鑒,下面來(lái)一起看看吧。

前言

大家都知道shell在文本處理上確有極大優(yōu)勢(shì),比如多文本合并、去重等,但是最近遇到了一個(gè)難搞的問(wèn)題,即兩個(gè)大數(shù)據(jù)量文件去重。下面來(lái)看看詳細(xì)的介紹吧。

要求 

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

其中A為關(guān)鍵詞和搜索量,以逗號(hào)分隔,約90萬(wàn)行。

B為關(guān)鍵詞,約400萬(wàn)行。

需要從A中找出與B重復(fù)的關(guān)鍵詞。

我試了N種姿勢(shì),但結(jié)果都不盡人意,最奇怪的是有些方法對(duì)小數(shù)據(jù)量的測(cè)試文件有用,一旦用在A與B上就會(huì)失敗,真叫人百思不得其解。

姿勢(shì)一:

awk -F, '{print $1}' A >keywords.txt
cat keywords.txt B.txt | sort | uniq -d
 
#先從A.txt種取出關(guān)鍵詞,然后與B.txt一起打開(kāi),用sort排序,uniq -d 取出重復(fù)的行

姿勢(shì)二:

awk -F, '{print $1}' A >keywords.txt
#照例先取出關(guān)鍵詞
 
comm -1 -2 keywords.txt B.txt
#利用comm命令,顯示兩個(gè)文件都存在的行

姿勢(shì)三:

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 >>重復(fù)關(guān)鍵詞.txt
  fi
done
 
#這種姿勢(shì)就稍微復(fù)雜點(diǎn)
#首先取出關(guān)鍵詞,然后利用for循環(huán)逐個(gè)去B.txt里面匹配(注意正則寫(xiě)法^$i$),如果匹配到的結(jié)果數(shù)不為0,說(shuō)明這個(gè)關(guān)鍵詞是重復(fù)的,然后輸出
#這種方法的優(yōu)點(diǎn)是穩(wěn)妥,缺點(diǎn)是效率太TM低了,90萬(wàn)個(gè)詞逐一與400萬(wàn)詞匹配,shell默認(rèn)又沒(méi)有多線程,耗時(shí)太長(zhǎng)。

姿勢(shì)四:

awk -F, '{print $1}' A >keywords.txt
cat keywords.txt B.txt | awk '!a[$1]++'
 
#這個(gè)方法的原理其實(shí)我不太懂,awk命令實(shí)在太強(qiáng)大太高深了,但是這種方法又簡(jiǎn)潔又快速

其實(shí)還有一種grep -v 、grep -f 的方法,但是我沒(méi)有試過(guò),所以不在這里列出了。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • linux自動(dòng)清理日志腳本分享

    linux自動(dòng)清理日志腳本分享

    這篇文章主要介紹了linux自動(dòng)清理日志腳本,主要功能是清理所有目錄的日志,根據(jù)給定日志目錄,刪除時(shí)間 結(jié)合crontab進(jìn)行清理日志
    2014-01-01
  • Bash Shell中忽略大小寫(xiě)的設(shè)置方法

    Bash Shell中忽略大小寫(xiě)的設(shè)置方法

    這篇文章主要介紹了Bash Shell中忽略大小寫(xiě)的設(shè)置方法,本文還講解了其它的一些方便輸入命令的設(shè)置,如關(guān)閉顯示隱藏文件、只按一次TAB鍵、搜索歷史命令等技巧,需要的朋友可以參考下
    2015-04-04
  • shell腳本學(xué)習(xí)指南[三](Arnold?Robbins?&?Nelson?H.F.?Beebe著)

    shell腳本學(xué)習(xí)指南[三](Arnold?Robbins?&?Nelson?H.F.?Beebe著)

    這篇文章主要介紹了shell腳本學(xué)習(xí)指南[三](Arnold?Robbins?&?Nelson?H.F.?Beebe著),需要的朋友可以參考下
    2014-02-02
  • Shell腳本實(shí)現(xiàn)自動(dòng)檢測(cè)修改最快的Ubuntu軟件源

    Shell腳本實(shí)現(xiàn)自動(dòng)檢測(cè)修改最快的Ubuntu軟件源

    這篇文章主要介紹了Shell腳本實(shí)現(xiàn)自動(dòng)檢測(cè)修改最快的Ubuntu軟件源,本文先是講解了實(shí)現(xiàn)的思路,并給了實(shí)現(xiàn)腳本源碼,需要的朋友可以參考下
    2014-10-10
  • Linux下JDK中文字體亂碼的解決方法

    Linux下JDK中文字體亂碼的解決方法

    下面小編就為大家?guī)?lái)一篇Linux下JDK中文字體亂碼的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • shell腳本實(shí)現(xiàn)猜數(shù)游戲

    shell腳本實(shí)現(xiàn)猜數(shù)游戲

    這篇文章主要為大家詳細(xì)介紹了shell腳本實(shí)現(xiàn)猜數(shù)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • linux下的tar命令詳細(xì)解釋

    linux下的tar命令詳細(xì)解釋

    在Linux中,壓縮與解壓用得最多的tar.tar命令確實(shí)很厲害。下面通過(guò)本文給大家分享linux下的tar命令詳細(xì)解釋,感興趣的朋友一起看看吧
    2017-08-08
  • Linux bash Shell中的變量類型詳解

    Linux bash Shell中的變量類型詳解

    這篇文章主要介紹了Linux bash Shell中的變量類型詳解,變量類型共分為本地變量、局部變量、環(huán)境變量、位置變量和特殊變量等,需要的朋友可以參考下
    2015-06-06
  • linux查看已使用內(nèi)存的常用命令

    linux查看已使用內(nèi)存的常用命令

    在Linux系統(tǒng)中,我們可以使用多個(gè)命令來(lái)查看內(nèi)存使用情況,其中比較常用的命令有free、top、ps和sar,使用free命令可以查看系統(tǒng)內(nèi)存的使用情況,這些命令可以幫助我們快速了解系統(tǒng)內(nèi)存的使用情況,從而更好地進(jìn)行內(nèi)存管理和優(yōu)化,需要的朋友可以參考下
    2024-01-01
  • shell查找當(dāng)前目錄下大于1M的文件的三種方法分享

    shell查找當(dāng)前目錄下大于1M的文件的三種方法分享

    查找當(dāng)前目錄下大于1M的文件的三種方法,有需要的朋友可以參考下
    2013-02-02

最新評(píng)論