강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

sort (텍스트파일을 행단위로 정렬한다.)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

sort

텍스트로된 파일의 행단위 정렬을 할때 사용하는 명령어이다.
복잡한 워드문서등의 편집이 아닌 간단한 텍스트문서를 대상으로 정렬작업을 할때 주로 사용되는 명령어이다.
이 명령어는 주로 특정 DB나 프로그램, 또는 쉘프로그램등의 입력값으로 사용되는 데이터를 직접 정렬하려고 할때 사용된다.


사용형식

 sort [OPTION]... [FILE]...  

사용예 #1

textfile이라는 파일의 내용은 아래와 같다.

[root@host3 command]# cat textfile
4       one     nine
7       eight   two
6       four    six
9       six     four
2       three   seven
3       seven   three
0       five    five
1       nine    one
8       two     eight
5       ten     zero
[root@host3 command]#

이 데이터를 간단히 정렬하기 위하여 다음과 같이 "sort 파일명"이라고 하였다.

[root@host3 command]# sort textfile
0       five    five
1       nine    one
2       three   seven
3       seven   three
4       one     nine
5       ten     zero
6       four    six
7       eight   two
8       two     eight
9       six     four
[root@host3 command]#

위와 같이 "sort textfile"이라고 하면 textfile의 각 행의 첫번째 단어(필드)들의 첫번째 문자들을 알파벳 오름차순으로 정령을 한다.

첫번째 문자가 동일할 경우에는 동일한 첫번째 문자를 가진 행끼리 두번째 문자를 가지고 정렬하게 된다.
두번째 문자가 동일할 경우에는 세번째.........
이런식으로 비교를 하여 정렬하게 된다.

아무런 옵션없이 사용하면 위의 예와 같이 화면으로만 출력한다.

그렇다면 이 결과를 파일로 저장하려면 어떻게 할까?


사용예 #2

이번에는 위의 출력되는 결과를 특정 파일에 저장하는 방법을 알아보자.
 
[root@host3 command]# sort textfile  > textfile_sort
[root@host3 command]#
[root@host3 command]# cat textfile_sort
0       five    five
1       nine    one
2       three   seven
3       seven   three
4       one     nine
5       ten     zero
6       four    six
7       eight   two
8       two     eight
9       six     four
[root@host3 command]#

위와 동일한 정렬을 하여 textfile_sort라는 파일에 결과를 저장하여 cat으로 결과파일을 확인한 것이다.
textfile_sort파일이 존재하지 않는다면 새로 만들어서 저장을 하게 된다.
그리고 textfile_sort파일이 이미 존재하는 파일이라면 기존의 파일내용은 모두 삭제되고 정렬결과만이 저장이 된다.

사용예 #3

이번에는 textfile을 내림차순(역순)으로 정렬을 해보자.
아래와 같이 -r옵션을 사용하면 오름차순이 아닌 내림차순으로 정렬을 해준다.
이 명령의 결과는 위의 "사용예 #1"과 정반대의 결과임을 알 수있다.

이 결과 또한 파일에 저장을 하려면 "> 파일명"을 명령어의 끝에 추가하여 실행하면 된다.

[root@host3 command]# sort -r textfile
9       six     four
8       two     eight
7       eight   two
6       four    six
5       ten     zero
4       one     nine
3       seven   three
2       three   seven
1       nine    one
0       five    five
[root@host3 command]#

위의 결과는 textfile의 각 행에 있는 첫번째 문자들을 내림차순(역순)으로 정렬을 한 것이다.

첫번째 문자가 동일할 경우에는 동일한 첫번째 문자를 가진 행끼리 두번째 문자를 가지고 정렬하게 된다.
두번째 문자가 동일할 경우에는 세번째.........

이런식으로 비교를 하여 정렬하게 된다.


사용예 #4

지금까지의 예는 모두 각 행의 첫번째 필드를 대상으로 정렬을 하였다.
그렇다면 첫번째 필드를 무시하고 각 행의 두번째 필드들만을 대상으로 정렬을 할 수는 없을까?

각 행의 두번째 필드들만을 대상으로 정렬을 하고자한다면 아래와 같이 -k옵션을 사용하면 된다.

즉, 지금까지의 예들은 모두 각 행의 첫번째 필드인 (각행의 숫자들, 0,1,2,....,9) 숫자를 대상으로 정렬을 하였다.
-k옵션을 사용하면  각행의 두번재 필드들을 대상으로 정렬을 하게 된다.

[root@host3 command]# sort -k 2 textfile
7       eight   two
0       five    five
6       four    six
1       nine    one
3       seven   three
9       six     four
5       ten     zero
2       three   seven
8       two     eight
4       one     nine
[root@host3 command]#

결과를 보면 각 행의 첫번째 필드는 무시되고 두번째 필드를 기준으로 오름차순 정렬이 된 것을 알 수 있다.


사용예 #5

이번에는 각 행의 두번째 필드들을 기준하여 내림차순(역순)정렬을 한 예이다.

[root@host3 command]# sort -r -k 2 textfile
4       one     nine
8       two     eight
2       three   seven
5       ten     zero
9       six     four
3       seven   three
1       nine    one
6       four    six
0       five    five
7       eight   two
[root@host3 command]#

위의 결과를 보면 첫번째 필드인 숫자들과는 무관하게 두번째 필드를 기준으로 내림차순 정렬이 된 것을 확인할 수 있다.


사용예 #6

이번에는 3번째 필드를 대상으로 오름차순 정렬을 한 것이다.

[root@host3 command]# sort -k 3 textfile
8       two     eight
0       five    five
9       six     four
4       one     nine
1       nine    one
2       three   seven
6       four    six
3       seven   three
7       eight   two
5       ten     zero
[root@host3 command]#

위의 결과를 보면 각행의 세번째 필드들을 기준으로 정렬이 되었음을 알 수 있다.

사용예 #7

이번에는 3번째 필드를 기준으로 내림차순(역순)정렬을 한 예이다.

[root@host3 command]# sort -r -k 3 textfile
5       ten     zero
7       eight   two
3       seven   three
6       four    six
2       three   seven
1       nine    one
4       one     nine
9       six     four
0       five    five
8       two     eight
[root@host3 command]#


사용예 #8

이번에는 textfile2라는 파일의 내용을 아래와 같이 가정하여 예를 들어 보겠다.
즉, textfile2라는 파일에는 아래와 같이 동일한 내용의 중복된 내용이 있다.
중복된 것은 몇개가 되든 하나로 유일하게 취급하여 정렬하고자 한다면 -u옵션을 사용한다.


다음은 textfile2의 내용이다.

[root@host3 command]# cat textfile2
3 three
3 three
4 four
4 four
1 one
1 one
5 five
5 five
2 two
2 two
[root@host3 command]#

이것을 아래와같이 일반적으로 정렬을 하면 다음과 같이 오름차순으로 정렬이 될 것이다.

[root@host3 command]# sort textfile2
1 one
1 one
2 two
2 two
3 three
3 three
4 four
4 four
5 five
5 five
[root@host3 command]#

위의 결과를 보면 동일한 내용이 중복되어 들어가 있는 것을 볼 수가 있다.

아래는 이런 중복된 행을 하나로 취급하여 유일하게 정렬을 한 것이다.

[root@host3 command]# sort -u textfile2
1 one
2 two
3 three
4 four
5 five
[root@host3 command]#


사용예 #9

이번에는 유일하게 정렬하면서 내림차순(역순)정렬을 함께 한 것이다.
[root@host3 command]# sort -u -r textfile2
5 five
4 four
3 three
2 two
1 one
[root@host3 command]#

유일정렬과 역순정렬을 함께한 결과가 위와 같다.

 

사용예 #10

이번에는 두번째 필드를 기준으로 정렬한 예이다.

[root@host3 command]# sort -k 2 textfile2
5 five
5 five
4 four
4 four
1 one
1 one
3 three
3 three
2 two
2 two
[root@host3 command]#

다음은 두번째 필드를 기준으로 정렬한 다음 유일정렬을 한 예이다.

[root@host3 command]# sort -u -k 2 textfile2
5 five
4 four
1 one
3 three
2 two
[root@host3 command]#

이렇게 sort명령어는 다양한 방법으로 응용이 가능하며, 특히 위의 예와 같이 텍스트파일의 중복제거를 하면서 특정 필드를 기준으로 오름차순과 내림차순등으로 정렬하는 것은 리눅스에서 한번 할 수 있는 매우 강력한 방법이 될 수가 있다.


저작권:수퍼유저코리아(
www.superuser.co.kr), 무단 재배포및 복사를 금합니다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,810 개
  • 현재 접속자 :  102 명