2014-01-22 51 views
8

在一個文本文件中,我有150個單詞。我有另一個文本文件,它有大約100,000行。如何從另一個文件中的一個文件中查找單詞?

如何檢查屬於第一個文件的每個單詞是否在第二個文件中?

我想過使用grep,但我找不到如何使用它來讀取原文中的每個單詞。

有沒有什麼辦法可以使用awk?還是另一種解決方案

我試着用這個shell腳本,但它幾乎每一行相匹配:

#!/usr/bin/env sh 
cat words.txt | while read line; do 
    if grep -F "$FILENAME" text.txt 
    then 
     echo "Se encontró $line" 
    fi 
done 

我發現另一種方法是:

fgrep -w -o -f "words.txt" "text.txt" 
+0

我檢舉此爲題外話 - 聽起來真是一個問題屬於超級用戶,而不是在這裏,因爲這更多的是如何使用內置的命令行工具而不是如何編程的問題。 – ArtOfWarfare

+1

@ArtOfWarfare本帖未脫離主題。你誤解了這個.. – hek2mgl

+0

@ hek2mgl - 看看答案。注意它們中沒有一個包含一行編程。爲什麼?因爲這不是一個編程問題 - 這是一個關於如何在Linux上使用內置命令行工具的問題。因此這是SuperUser的問題,而不是StackOverflow。 – ArtOfWarfare

回答

5

您可以使用fgrep -f

fgrep -f "first-file" "second-file" 

或者匹配全部單詞:

fgrep -w -f "first-file" "second-file" 

UPDATE:按評論:

awk 'FNR==NR{a[$1];next} ($1 in a){delete a[$1]; print $1}' file1 file2 
+1

酷!不知道!我正要提出一些事情:'grep -E $(cat search | tr'\ n''|')text :) :) – hek2mgl

+0

謝謝@anubhava!你的回答很有幫助。 – ocslegna

+1

不客氣,很高興它解決了。 – anubhava

2

使用grep這樣的:

grep -f firstfile secondfile 

第二個選項

謝謝埃德莫頓爲指出文件「保留」中的單詞被視爲模式。如果這是一個問題 - 這可能是也可能不是 - 在OP也許可以用這樣的事情不使用模式:

文件「保留」

cat 
dog 
fox 

和文件「文本」

The cat jumped over the lazy 
fox but didn't land on the 
moon at all. 
However it did land on the dog!!! 

awk腳本是這樣的:

awk 'BEGIN{i=0}FNR==NR{res[i++]=$1;next}{for(j=0;j<i;j++)if(index($0,res[j]))print $0}' reserved text 

與輸出:

The cat jumped over the lazy 
fox but didn't land on the 
However it did land on the dog!!! 

第三個選項

或者,也可以很簡單做,但是速度比較慢在bash:

while read r; do grep $r secondfile; done < firstfile 
+0

謝謝@MarkSetchell – ocslegna

+1

這是尋找正則表達式,所以將'the'和'a.r'匹配到'theatre' - 是否可取? –

相關問題