오늘 포스팅에서는 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번째 행이 사라진 것을 확인 할 수 있습니다.

 

아래 포스팅에서 파이썬을 이용하여 텍스트 파일의 내용을 unique 하게 sorting 하는 방법에 대해 소개한 적이 있는데요~ 



2013/11/26 - [programming language/Python] - ipython으로 unique 하게 sorting 하기

 


좀더 찾아보니 리눅스 명령어들을 사용하면 훨씬 더 쉽게 할 수 있더군요.

 

리눅스를 사용하시는 분들이라면 그냥 사용하면 되겠지만 윈도우를 사용하시는 분들은 아래 포스팅에서 소개해 드렸던 GNU On Windows (GOW) 를 설치 하시기 바랍니다.



2012/11/11 - [유틸] - GNU On Windows 를 이용하여 Windows 에서 Linux 명령어 사용하기

 

아님~ 윈도우에 Cygwin 을 설치해서 사용하시는 분들이라면 그냥 Cygwin terminal 상에서 하셔도 무방 합니다.

 

unique 한 정렬을 위해 사용하는 명령어는 uniq 인데요~

 

다음과 같은 sampleFile.txt 파일이 있을 때~

 

위에 보이는 바와 같이 sample1 이 3개 sample3 가 2 개가 있고 나머지는 1개씩 있습니다.

 

uniq 명령어는 연달아서 중복된 내용이 있을 때만 중복된 내용을 제거 해 줍니다. 따라서 텍스트 파일의 내용을 unique 하게 정렬하기 위해서는 다음과 같이 sort 를 먼저 한 다음에 uniq 명령어를 통해 중복된 내용들을 제거 해 줄 수 있습니다.

 

uniq 명령어에는 다음과 같은 다양한 옵션들이 있는데~ 제가 사용하는 옵션들은 다음과 같습니다.

 

–c : 개수를 센다.

 

-d : 중복되는 라인만 나오게 한다.

 

-u : unique 한 라인만 나오게 한다.



+ Recent posts