2017-03-01 5 views
0

좋아 트위스트와 함께 중복 된 줄을 제거하지만 조금 더 복잡한보다입니다 ..내가 중복 행을 제거 할 수 있도록 gnuwin32

을 나는라는 파일 USERS.TXT이 파일의 예는 다음과 같습니다

users:[email protected] 
users1:[email protected] 
때문에 내 시스템 사람들의 버그 이제

다른 사람과 같은 이메일을 등록 할 수 있었다, 그래서 나는 선이 같은 이메일이있는 경우, 두 번 이상 문제의 예를 제거하려면 :

user:display:[email protected] 
user2:[email protected] 
user3:[email protected] 
user4:[email protected] 

공지 사항 호 w user, user2, user3, user4 모두 같은 이메일을 가지고 있습니다. 잘 user2, user3, user4를 제거하고 싶지만 사용자를 유지하고 싶습니다. 또는 그 반대의 경우도 마찬가지입니다 (요청에 의해 처음 선택됩니다). ,

awk '!a["user:display:[email protected]"]++' filename 

++ 수단 ..

그래서

[email protected] is in 20 lines remove 19 
[email protected] is in 555 lines remove 554 

등등 .. 제

+1

이메일을 'awk' 배열의 색인으로 사용하십시오. 각 줄을 처리 할 때 전자 메일이 배열에 없으면 줄을 인쇄하여 배열에 추가하십시오. – Barmar

+0

http://stackoverflow.com/questions/2604088/awk-remove-line-if-field-is-duplicate – Barmar

+0

"요청에 의해 처음으로 픽업을 받는다"는 의미를 설명 할 수 있습니까? 어떤 라인이 남아 있는지 선택하는 기준은 무엇입니까? 알파벳순의 첫 번째 사용자 이름? 파일에 처음으로 나타 납니까? – Fred

답변

0

이이 awk으로 할 수 있으면 True로 설정하십시오. 그래서, 그것은 인쇄 결과와 일치합니다.

!은이 경우에 사용됩니다. 그래서 경기가 끝나면 거짓으로 변합니다.

이제
$ awk 'a["user:display:[email protected]"]++' filename 
user2:[email protected] 
user3:[email protected] 
user4:[email protected] 
line_random1 
linerandom_2_ 

그래서, 지금 방금 무엇에 awk에 필터링 할 필요가

$ awk '!a["user:display:[email protected]"]++' filename 
user:display:[email protected] 

!과 :

예 (같이하는 것은 경기 후 인쇄되지 않습니다). 파일이 얼마나 큰 어떤 생각, 나는 다음을 수행 할 최소한의 항목을 계산 없습니다 :

$ grep -o '[email protected]' filename | wc -l 
4 

당신이 awk에, 단지 새 파일에 기록 무엇을 알고 있다면 - 단지 저장 될 수 있습니다.