본문 바로가기
Linux

Linux Sort 명령어를 사용한 unique sort

by __observer__ 2014. 6. 24.
반응형

오늘 포스팅에서는 Linux sort 명령어의 사용 방법에 대해 알아보려 합니다.

 

아래 포스팅에서 텍스트 파일의 내용을 unique 하게 sorting 하는 방법에 대해 설명 드린적이 있는데~

 

아래 포스팅 에서는 Gow의 uniq 명령과 윈도우의 sort명령을 사용했었습니다.


2014/05/14 - [컴퓨터일반] - windows console 에서 텍스트 파일 내용 unique 하게 정렬하기

 

하지만 Linux 의 sort 명령어에는 굉장히 편리하게도 unique 옵션이 있더군요.

 

간단한 예로 다음과 같은 테스트 쿼리를 예로 들어보죠~

 

아래 insert 구문은 아래 포스팅에서 소개 드렸던 generateda를 사용하여 만들어진 테스트 데이터 입니다.


2014/06/17 - [유틸] - Database 테스트 데이터 생성 사이트 generatedata


INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Ahmed","1-156-444-1052",5);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Nissim","1-786-558-9774",2);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Herman","1-831-439-1058",4);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Nissim","1-144-592-7170",1);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Gannon","1-863-622-1551",4);

INSERT INTO myTable (NAME,PHONE,NUMBER) VALUES ("Samuel","1-963-369-2263",5);

 

generateda에서 랜덤하게 만들어진 데이터 이므로 중복이 있을수도 있겠죠~ 위에 예로 든 데이터에서는 Nissim 이라는 이름이 중복입니다.

 

위 예처럼 몇 줄 안 되는 경우에는 일일이 확인해서 중복되는 데이터들을 지워 줄 수 있겠지만,중복되는 경우가 많다면 일일이 사람이 지워주기는 힘들겠죠~

 

Linux 의 sort 명령어를 몰랐다면 Excel 과 같은 프로그램등을 이용해서 정렬해서 중복되는 데이터들을 제거 했겠지만 대단히 불편했을 것 같네요~

 

Sort 명령어의 몇 가지 옵션에 대해 알아보겠습니다. 저는 현재 windows 환경이라 Cygwin 에서 linux sort 함수를 사용하도록 하겠습니다.

 

-u : unique 옵션

-t : 뒤에 구분자를 넣어 줌

-k : 뒤에 몇 번째 열을 기준으로 sort 할 것인지를 넣어줌, 쉼표로 구분하여 시작열, 끝열을 넣어줌, 시작열만 지정할 경우 시작열부터 줄의 끝까지임

 

 

 

위 옵션을 바탕으로 위에서 소개한 쿼리 예에 대해 이름에 따른 정렬을 시켜 보죠~ 위 쿼리는 query.txt 파일에 적혀 있습니다.

 

위 쿼리 문자열을 보면 쌍따옴표(") 를 기준으로 2번째 열이 바로 이름 컬럼이라는 것을 알 수있습니다. 따라서 구분자로는 –t 옵션에 쌍따옴표를 넣어주고~ –k 옵션에는 2를 넣어 줍니다. 하지만 그냥 2를 넣어주면 2 부터~ 끝까지 이기 때문에~ 정상적으로 unique 하게 sort 가 안됩니다. 딱 2번째 컬럼 즉 이름 부분만 선택하기 위해 2,2 라고 넣어줘야 합니다.

 

sort –u –k 2,2 –t '"' query.txt > uniq.txt

 

 

위 명령을 실행해 보겠습니다. 다음과 같이 중복된 이름이었던 4번째 행이 사라진 것을 확인 할 수 있습니다.

 

반응형

댓글