본문 바로가기
Server/centos

awk와 uniq로 중복 제거하기

by 유주원 2015. 11. 10.

아래와 같은 포멧의 test.txt 파일을 ip별로 파싱해서 unique 한 ip 개수를 확인해야 하는 업무가 주어졌다.


사용자 ip - 메시지


uniq를 쓰면 중복 라인을 제거할 수는 있지만, 사용자 ip만 중복을 제거한 후 그 개수를 세어야 했기 때문에 awk를 사용해보았다. (awk는 잘 사용안하는 경향이 있던 나..)


awk 사용은 아래와 같이 진행


$> awk 'BEGIN {FS="-"} {print $1}' test.txt 


위의 명령어를 해석하자면 test.txt 파일의 필드 구분자 -를 라인별로 파싱해서 파싱한 첫번째 단어를 출력하라가 된다.

위와 같이 명령어를 치면 '사용자 ip - 메시지' 중에서 '사용자 ip'만 출력이 된다.

만약 print $2를 준다면 '메시지'가 출력될 것이다.


그 밖에 awk의 많은 기능들이 있지만.. 일단 필요한건 이정도까지만이니...


이렇게 ip가 출력이 되는 것을 확인했으니 sort 하고 uniq 명령어를 실행하면 unique한 ip만 출력이 되게 된다.


$> awk 'BEGIN {FS='-'} {print $1}' test.txt | sort | uniq


본래의 궁극적인 목표가 unique ip의 개수를 세는 것이었기 때문에 마지막에 wc를 추가.


$> awk 'BEGIN {FS='-'} {print $1}' test.txt | sort | uniq | wc -l