Table of Contents
sort #
sort는 텍스트로 된 파일의 내용을 정렬할 때 사용하는 명령어이다. 특정 DB나 프로그램, shell 등의 입력값으로 사용되는 데이터를 편집할 때 사용할 수 있다. 옵션을 주지 않으면 순서는 공백, 숫자, 대문자, 소문자 순이다. 또한 디렉토리 내의 파일 리스트를 용량별로 정렬할 수도 있고, 파일명 기준으로도 정렬할 수 있고, 특정 내용을 기준으로도 정렬을 할 수 있다.
사용법 #
sort [option] 파일이름
option #
-b : 처음 공백을 무시한다.
-f : 대, 소문자를 무시한다.
-d : 공백과 알파벳 문자 순으로 정렬한다.
-t : 각 필드를 구분하는 키의 위치를 구분자로(separator)로 규정한다.
-r : 정렬 순서를 반대로 하여 내림차순으로 정렬한다. (소문자, 대문자, 숫자, 공백)
-o : 정렬한 결과를 파일명으로 저장한다.
-k n[,m] : 정렬한 키의 위치를 n번째 필드로 한다 (m값이 있을 경우 n에서 시작해서 m에서 끝낸다.).
-c : 파일이 정렬되었는지를 검사한다. 정렬되었으면 아무런 출력도 하지 않고 정렬되지 않았다면 정렬이 되지 않았다는 메시지를 출력한다.
-n : 숫자를 같은 문자가 아닌 정말로 숫자로 취급해서 수의 크기대로 정렬한다.
-u : unique의 약자로 중복되는 라인은 출력하지 않는다.
예시 #
sort_test.txt 파일의 내용이 다음과 같다고 한다.
(base) [hccho@c04 ~]$ cat sort_test.txt
ABC
abc
bc
a
b
abcd
오름차순 및 내림차순, 파일 저장하기
(base) [hccho@c04 ~]$ sort sort_test.txt
a
abc
ABC
abcd
b
bc
(base) [hccho@c04 ~]$ sort -r -o sort_test_rev.txt sort_test.txt
(base) [hccho@c04 ~]$ cat sort_test_rev.txt
bc
b
abcd
ABC
abc
a
k 옵션의 예시를 위해 sort_k.txt 파일의 내용이 다음과 같다고 한다.
(base) [hccho@c04 ~]$ cat sort_k.txt
1 ABC
1 abc
3 bc
3 a
2 b
4 abcd
K 옵션 이용하기
(base) [hccho@c04 ~]$ sort -k1 sort_k.txt
1 abc
1 ABC
2 b
3 a
3 bc
4 abcd
(base) [hccho@c04 ~]$ sort -k2 sort_k.txt
3 a
1 abc
1 ABC
4 abcd
2 b
3 bc
만약 첫 번째 column에는 chromosome 번호가 오고 두 번째 column에는 length가 온다고 가정해보자.
(base) [hccho@c04 ~]$ cat chromosome.txt
chr1 100
chr1 20
chr2 10
chr3 1000
chr2 30
이 경우에 chromosome 번호를 기준으로 정렬하고 싶으면 sort 기본 명령어를 실행하면 된다.
(base) [hccho@c04 ~]$ sort chromosome.txt
chr1 100
chr1 20
chr2 10
chr2 30
chr3 1000
그럼 만약 length 기준으로 정렬하고 싶으면 어떻게 해야될까?
(base) [hccho@c04 ~]$ sort -k2 chromosome.txt
chr2 10
chr1 100
chr3 1000
chr1 20
chr2 30
위에서 예시를 들었던 k 명령어를 이용해봤지만 20보다 100과 1000이 앞자리가 1이라는 이유로 먼저 정렬이 되었다. 이런 경우에는 다음과 같은 명령어로 해결하면 된다.
(base) [hccho@c04 ~]$ sort -nk2 chromosome.txt
chr2 10
chr1 20
chr2 30
chr1 100
chr3 1000
그럼 마지막으로 chromosome 번호와 length가 이름으로 있는 파일이 있을 때 chromosome 번호와 length 모두 오름차순 기준을 만족하면서 정렬하고 싶을 땐 다음과 같이 실행하면 된다.
(base) [hccho@c04 ~]$ cat chromosome_lentgh.txt
chr1_100 geneA
chr2_10 geneB
chr1_50 geneC
chr2_300 geneD
chr3_60 geneE
chr2_60 geneF
(base) [hccho@c04 ~]$ sort -Vk1 chromosome_lentgh.txt
chr1_50 geneC
chr1_100 geneA
chr2_10 geneB
chr2_60 geneF
chr2_300 geneD
chr3_60 geneE
Suggested Pages #
- 0.025 Mint linux
- 0.025 CentOS
- 0.025 RedHat
- 0.025 Minix
- 0.025 Unix
- 0.025 Linus Torvalds
- 0.025 Ubuntu
- 0.025 유닉스
- 0.013 Open suse
- 0.013 미닉스
- More suggestions...