[유닉스] 파일 정렬 ( sort )


sort

  • 텍스트로 된 입력 내용을 정렬하여 화면에 출력
  • 형식 : sort [옵션] [파일]

  • 사용 예
    • sort test
    • sort –fd test
    • sort –k 2 –nr –o sort.out test


기본 정렬

  • sort 명령을 옵션 없이 이용하면 환경 변수 LC_COLLATE의 값에 따라 다르게 정렬됨
  • LC_COLLATE가 없으면 LANG 값에 따라 정렬 순서가 달라짐
  • 현재 환경 변수의 설정값은 env와 grep 명령으로 확인
    • 영문 유니코드로 설정되어 있음을 나타냄
    • 정렬 순서 : 공백 문자, 특수 문자, 숫자, 영문자의 순 (영문자는 대소문자 구분하지 않음)
$ env | grep LC_COLLATE
$ env | grep LANG
LANG=en_US.UTF-8
$
$ vi test_sort
$ cat test_sort
This is a test file.
1234
Unix
unix
_cshrc
~Hi~!
023
80
@
#include
abcd
{abc}
?
$
$ sort test_sort
?
@
023
1234
80
{abc}
abcd
_cshrc
~Hi~!
#include
This is a test file.
unix
Unix
$
  • 환경변수값을 en_US.UTF-8에서 ‘C’로 바꿔 언어를 영문 아스키로
    • LANG의 값을 ‘C’로 바꾸면 아스키 코드값에 따라 정렬
    • 정렬 순서 : 숫자, 영문 대문자, 영문 소문자의 순
    • 특수 문자는 숫자보다 앞에, 숫자와 대문자 사이, 대문자와 소문자 사이, 소문자 뒤에 등 아스키 코드값에 따라 정렬
$ LANG=C
$ env | grep LANG
LANG=C
$
$ sort test_sort
023
#include
1234
80
?
@
This is a test file.
Unix
_cshrc
abcd
unix
{abc}
~Hi~!
$


사전식으로 정렬 :-d

  • 특수 문자들을 무시하고 문자와 숫자만 고려하여 정렬
    • 공백 문자, 숫자, 소문자, 대문자의 순
$ sort –d test_sort
?
@
023
1234
80
{abc}
abcd
_cshrc
~Hi~!
#include
This is a test file.
unix
Unix
$


역순으로 정렬 : -r

  • 기본 정렬의 역순으로 정렬
$ sort –r test_sort
Unix
unix
This is a test file.
#include
~Hi~!
_cshrc
abcd
{abc}
80
1234
023
@
?
$

필드 정렬 : –k

  • 첫 번째 문자가 아닌 필드를 기준으로 정렬
  • 필드 구분자는 특별히 지정하지 않으면 공백이나 탭 문자를 기준으로 나뉨
$ vi test_sort2
$ cat test_sort2
001 Hong Gil-Dong 80 M
002 Park Ji-Sung 76 M
003 Cha Doo-Ri 90 M
004 Park Chan-Ho 88 M
005 Kim Yun-A 50 F
006 Bae Sue-Ji 48 F
007 Han So-Ri 49 F
$
  • 두 번째 필드인 성에 따라 정렬
$ sort –k 2 test_sort2
006 Bae Sue-Ji 48 F
003 Cha Doo-Ri 90 M
007 Han So-Ri 49 F
001 Hong Gil-Dong 80 M
005 Kim Yun-A 50 F
004 Park Chan-Ho 88 M
002 Park Ji-Sung 76 M
$


필드 구분자 지정하기 : –t

  • 필드가 공백 문자가 아닌 다른 문자로 구분되어 있으면 –t 옵션을 이용해 필드 구분자 지정할 수 있음
    • 필드 구분자(:)를 기준으로 필드를 구분하고 첫 번째 필드인 사용자 이름을 기준으로 정렬
$ sort –t: /etc/passwd
avahi-autoipd:x:105:113:......
avahi:x:111:117:......
backup:x:34:34:backup:/var/backups:......
bin:x:2:2:bin:/bin:/usr/sbin/nologin
colord:x:113:21:colord colour management daemon......
......
$