2014-03-27 122 views
2

我正在嘗試寫一篇關於具有公共接入點名稱的危險的博客文章。比較兩個文本文件並計算出現次數

因此,我做了一些wardriving獲取訪問點名稱列表,並且我從Renderlab下載了1000個最常見的訪問點名稱(其中存在彩虹表)的列表。

但是我怎樣才能比較這兩個文本文件,看看有多少我收集的訪問點名稱可能受到彩虹表的攻擊?

的文本文件建立這樣的:

collected.txt:

linksys 
internet 
hotspot 

最常見的接入點名稱叫 SSID.txt:

default 
NETGEAR 
Wireless 
WLAN 
Belkin54g 

所以腳本應對行進行排序,比較它們並顯示來自collect.txt的行在SSID.txt中找到了多少次。

這是否有意義?任何幫助將不勝感激:)

+0

[使用awk在文件A中選擇行,基於查找文件B中的匹配項]的可能重複(http://stackoverflow.com/questions/10584531/using-awk-to-select-lines-in-file -a-based-on-finding-matches-in-file-b) – BMW

回答

2

如果你不介意使用python腳本:

file1=open('collected.txt', 'r')   # open file 1 for reading 
with open('SSID.txt', 'r') as content_file: # ready file 2 
    SSID = content_file.read() 

found={}         # summary of found names 
for line in file1: 
    if line in SSID: 
     if line not in found: 
      found[line]=1 
     else: 
      found[line]+=1 
for i in found: 
    print found[i], i      # print out list and no. of occurencies 

...它可以包含這些文件的目錄下運行 - collected.txt和SSID.txt - 它會返回一個看起來像列表此:

5 NETGEAR 
3 default 
(...) 

腳本行由行讀取文件1,並比較其整個文件2。可以很容易地修改,以從命令提示接受文件名。

+0

我不介意使用Python。但是我無法運行這個腳本。它與collect.txt和SSID.txt在相同的目錄中,但是當我使用「python compare.py」執行它時,沒有任何反應。 我運行Python 2.7.5+。任何想法可能是錯誤的? :) – user2956248

+0

沒關係,它現在的作品!非常感謝:) – user2956248

+0

不客氣。很高興幫助 - 也感謝我的第一個接受的答案:) – Taku

0

要查找文件中的每一行出現在文件B的次數,你可以這樣做:

awk 'FNR==NR{a[$0]=1; next} $0 in a { count[$0]++ } 
    END { for(i in a) print i, count[i] }' A B 

如果你想輸出排序,管道輸出到sort,但沒有必要進行排序只是爲了找到計數。請注意,$0 in a子句可以省去以消耗更多內存爲代價,如果文件B非常大,這可能是一個問題。

相關問題