텍스트로된 파일의 행단위 정렬을 할때 사용하는 명령어이다.
복잡한 워드문서등의 편집이 아닌 간단한 텍스트문서를 대상으로 정렬작업을 할때 주로 사용되는 명령어이다.
이 명령어는 주로 특정 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명령어는 다양한 방법으로 응용이 가능하며, 특히 위의 예와 같이 텍스트파일의 중복제거를 하면서 특정 필드를 기준으로 오름차순과 내림차순등으로 정렬하는 것은 리눅스에서 한번 할 수 있는 매우 강력한 방법이 될 수가 있다.
'UNIX > Linux' 카테고리의 다른 글
[Linux] whatis (명령어의 간략한 설명을 보여준다.) (0) | 2012.06.13 |
---|---|
[Linux] whereis(명령어의실행파일,소스,man 페이경로확인 (0) | 2012.06.13 |
[Linux] du (파일및 디렉토리의 용량을 확인한다.) (0) | 2012.06.13 |
[Linux] df (파일시스템들의 사용량 정보확인) (0) | 2012.06.13 |
[Linux] pwconv (shadow패스워드정책으로 변환한다.) (0) | 2012.06.13 |