2014-03-27 3 views
2

공통 액세스 지점 이름의 위험에 대한 블로그 게시물을 작성하려고합니다.두 개의 텍스트 파일 비교 및 ​​발생 횟수 계산

액세스 포인트 이름 목록을 얻으려고 일부 wardriving을했는데 Renderlab에서 가장 일반적인 액세스 포인트 이름 목록 (무지개 표가있는 곳)을 다운로드했습니다.

그러나 레인보우 테이블의 공격에 대해 열린 수집 된 액세스 포인트 이름이 몇 개인 지 확인하려면 어떻게해야합니까? 다음과 같이 구축되어

텍스트 파일 :

collected.txt :

linksys 
internet 
hotspot 

가장 일반적인 액세스 포인트 이름이 SSID.txt라고 :

default 
NETGEAR 
Wireless 
WLAN 
Belkin54g 

그래서 스크립트가해야 선을 정렬하고, 비교하고, SSID.txt에 collected.txt의 줄이 몇 번 있는지 보여줍니다.

그게 의미가 있습니까? 도움이된다면 감사 할 것입니다 :)

+0

가능한 [awk를 사용하여 파일 B의 일치 항목을 기반으로 파일 A의 행을 선택] (http://stackoverflow.com/questions/10584531/using-awk-to-select-lines-in-file) -a-based-finding-matches-in-file-b) – BMW

답변

2

당신은 파이썬 스크립트를 사용하여 괜찮다면 :

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 
(...) 

스크립트는 파일을 한 행씩 읽고 전체 파일과 비교합니다. 2. 명령 프롬프트에서 파일 이름을 가져 오도록 쉽게 수정할 수 있습니다.

+0

파이썬을 전혀 사용해도 상관 없습니다. 하지만이 스크립트를 실행할 수 없습니다. 그것은 collect.txt 및 SSID.txt와 같은 dir에 있지만, "python compare.py"로 실행하면 아무 일도 일어나지 않습니다. Python 2.7.5 이상을 실행합니다. 어떤 생각이 잘못된 것일까 요? :) – user2956248

+0

Nevermind, 이제 작동합니다! 고마워요 :) – user2956248

+0

당신을 진심으로 환영합니다. 도와 줘서 기뻐요 - 또한 내 첫 번째 대답은 여기에 감사 : – Taku

0

파일 A의 각 라인은 파일 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가 매우 큰 경우 문제가 될 수있는 더 많은 메모리를 소비하는 대신에 생략 할 수 있습니다.