사용법

  • 파일의 내용을 라인 단위로 정렬해 출력한다.
$ sort filename

-r : 역순 정렬

  • -r, --reverse: 파일의 내용을 역순으로 정렬해 출력한다.
$ sort -r filename

-n : 숫자로 정렬

  • -n, --numeric-sort: 숫자로 정렬한다.
$ # 기본 옵션으로 정렬하면 194, 35를 문자열로 정렬하므로 194가 앞서게 된다
$ sort test

194
35
522

$ # 숫자 옵션으로 정렬해야 35가 194보다 앞서게 된다.
$ sort -n test

35
194
522

-u : 중복 제거

  • -u, --unique
$ cat sorted
35
35
194
522

$ sort -u sorted
194
35
522

-c : 정렬 체크

  • -c, --check: 정렬되었는지 체크한다.
    • -u 옵션과 섞어서 쓰면 중복된 값이 있어도 보고를 출력한다.
$ # 숫자로 정렬한 파일 sorted를 준비한다
$ sort -n test > sorted
$ cat sorted
35
194
522

$ # 랜덤하게 섞어놓은 파일 randomed를 준비한다
$ sort -R test > randomed
$ cat randomed
522
194
35

$ # randomed 는 정렬되었는가? 비정렬된 부분에 대한 보고가 출력된다.
$ sort -c randomed
sort: randomed:2: disorder: 194

$ # sorted 가 정렬되었는가? 정렬되지 않았다는 결과가 나온다
$ sort -c sorted
sort: sorted:2: disorder: 194

$ # sorted 가 숫자로 정렬되었는가? 숫자로 정렬된 상태이므로 보고가 나오지 않는다
$ sort -cn sorted

$ # 옵션을 이렇게 따로 줘도 상관없다
$ sort -c -n sorted

-R : 랜덤 정렬

  • -R, --random-sort
$ # 이것으로 터미널에서 가위바위보를 할 수 있다!
$ echo -e "가위\n바위\n보" | sort -R | head -1

-k : 필드 기준 정렬

다음과 같은 파일이 있다고 할 때

$ cat test

1 9 4
3 5 8
5 2 2
  • -k숫자 옵션을 주는 방식으로 기준 필드를 정할 수 있다.
$ sort test -k1

1 9 4
3 5 8
5 2 2

$ sort test -k2

5 2 2
3 5 8
1 9 4

$ sort test -k3

5 2 2
1 9 4
3 5 8
  • -t 옵션을 주면 field separator를 지정할 수 있다.
$ # grep 으로 파일별로 test가 몇 번 나타나는지 체크한 후, sort로 빈도수 기준 정렬
$ grep -c test * | sort -t: -k2 -n -r
tags:903
package.json:1
generateData.js:1
test.md:0

-b : prefix 공백 무시

-b, --ignore-leading-blanks

Ignore leading blank characters when comparing lines.

다음과 같은 텍스트가 있을 때 -b 옵션을 사용하면 prefix 공백을 무시하고 정렬할 수 있다. Vim에서 :'<,'>!sort -b 와 같이 사용하기에도 좋다.

    * [[/blog/this/random-link]]
    * [[/blog/this/table-generate]]
* [[/blog/this]]
* [[/my-wiki]]
    * [[my-wiki/123]]
    * [[/blog/this/img-migration-to-resource]]
* [[/favicon]]
* [[/blog/create-jekyll-blog]]
    * [[/blog/this/404-fallback]]
* [[jekyll-category-tag]]
    * [[/blog/this/todo]]

결과는 다음과 같다.

* [[/blog/create-jekyll-blog]]
* [[/blog/this]]
    * [[/blog/this/404-fallback]]
    * [[/blog/this/img-migration-to-resource]]
    * [[/blog/this/random-link]]
    * [[/blog/this/table-generate]]
    * [[/blog/this/todo]]
* [[/favicon]]
* [[jekyll-category-tag]]
* [[/my-wiki]]
    * [[my-wiki/123]]

-V : 버전포맷 인식 정렬

$ # 원본 파일의 내용: 랜덤하게 섞여 있다.
$ cat version.txt
sort-1.024.003.
sort-1.23.1.tgz
sort-1.024.tgz
sort-1.024.003.tgz
sort-1.022.tgz
sort-1.024.009.tgz
sort-1.024.07.tgz
sort-1.23.tgz

$ # 버전정렬 결과
$ sort -V version.txt
sort-1.022.tgz
sort-1.23.tgz
sort-1.23.1.tgz
sort-1.024.tgz
sort-1.024.003.
sort-1.024.003.tgz
sort-1.024.07.tgz
sort-1.024.009.tgz

-h : 사람이 읽기 쉬운 포맷 인식 정렬

  • -h, --human-numeric-sort: 사람이 읽기 좋게 SI 단위를 사용하는 숫자를 정렬한다.
$ # sort -h 를 사용하지 않은 경우: 파일 용량 기준으로 보면 정렬이 되지 않았다.
$ ls -d */ | xargs du -sh
8.0K	_data/
 40K	_includes/
 36K	_layouts/
128K	_posts/
 44K	_sass/
318M	_site/
 41M	_wiki/
4.0K	blog/
4.0K	css/
4.5M	data/
 24K	js/
1.3M	node_modules/
249M	resource/
 32K	tool/
$ # sort -h 를 사용한 경우
$ ls -d */ | xargs du -sh | sort -h
4.0K	blog/
4.0K	css/
8.0K	_data/
 24K	js/
 32K	tool/
 36K	_layouts/
 40K	_includes/
 44K	_sass/
128K	_posts/
1.3M	node_modules/
4.5M	data/
 41M	_wiki/
249M	resource/
318M	_site/

함께 읽기

  • [[/cmd/du]]
  • [[/cmd/grep]]
  • [[/cmd/ls]]