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

리눅스마스터2급강좌 : 파일정보 정렬 및 분할

작성자 정보

  • 관리자 작성
  • 작성일

컨텐츠 정보

본문

리눅스마스터2급강좌 : 파일정보 정렬 및 분할

 

파일 정보 정렬 및 분할

sort

sort 명령어는 텍스트로 된 파일의 행단위 정렬을 할 때 사용하는 명령어이다.

 

 

 

 

복잡한 워드 문서 등의 편집이 아닌 간단한 텍스트 문서를 대상으로 정렬 작업을 할 때 주로 사용된다.

 

 

 

 

또한 이 명령어는 특정 DB, 프로그램 및 쉘프로그램 등의 입력값으로 사용되는 데이터를 직접 정렬 또는 편집할 때 편리하게 사용할 수 있다.

 

 

 

 

예를 들어 현재 디렉토리 내의 파일 리스트를 용량별로 정렬한다든지, 현재 디렉토리내의 파일명을 기준으로 정렬한다든지, 특정 파일 내용의 특정열을 기준으로 하여 정렬한다든지 하는 작업을 할 수 있다.

 

 

 

 

 

 

다음은 아무 옵션 없이 sort 명령을 내린 것이다.

 

 

 

 

이렇게 하면 각 행의 첫 번째 열을 기준으로 정렬한다.

 

 

 

 

 

 

 

 

 

 

[root@sulinux ~]# 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@sulinux ~]# 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@sulinux ~]#

 

 

 

 

 

sort 명령에 사용되는 옵션은 다음과 같다.

 

옵 션

기 능

-b

처음의 공백들은 무시한다.

-d

공백과 알파벳 문자 순을 고려한다.

-f

대소문자를 구분하지 않는다.

-g

일반 수치(numerical value)에 따라 비교한다.

-n

스트링(string) 수치에 따라 비교한다.

-r

내용을 비교하여 내림차순(역순)으로 정렬한다.

-c

정렬이 이미 되어 있는 경우에 정렬하지 않는다.

-k

지정한 열을 기준으로 정렬한다.

 

 

 

 

기본값은 첫 번째 열이다.

-o file

표준출력 대신에 파일로 결과를 작성한다.

-u

중복된 행을 하나로 취급하게 유일하게 정렬한다.

 

위 결과는 “sort textfile > textfile_sort”와 같이 리다이렉션을 사용하여 파일로 저장할 수 있는데, 이것은 다음과 같이 o 옵션에 의해서도 가능하다.

 

 

 

 

 

 

 

 

 

[root@sulinux ~]# sort o sort_file textfile

[root@sulinux ~]#

 

 

 

 

 

다음은 textfile을 내림차순(역순)으로 정렬한 예이다.

 

 

 

 

 

[root@sulinux ~]# 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@sulinux ~]#

 

 

 

 

 

옵션들을 복수로 사용하면 복합적인 결과를 얻게 된다.

 

 

 

 

다음은 특정 파일의 내용을 지정한 열을 기준으로 내림차순으로(역순)으로 정렬한 것이다.

 

 

 

 

 

[root@sulinux ~]# sort r -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@sulinux ~]#

 

 

 

 

 

파이프(|)를 활용하면 특정 명령의 결과에 대해서 sort 명령으로 정렬할 수 있다.

 

 

 

 

다음은 “ls l” 명령을 파이프(|)로 연결하여 sort 명령으로 현재 디렉토리 내의 파일들을 용량기준으로 내림차순(역순)으로 정렬한 것이다.

 

 

 

 

 

[root@sulinux ~]# ls l | sort r -k 5

-rw-r--r-- 1 root root 808003 59 2013 termcap

-rw------- 1 root root 362031 223 2006 services

-rw-r--r-- 1 root root 250915 1121 04:02 prelink.cache

-rw-r--r-- 1 root root 92812 710 2008 Muttrc

-rw-r--r-- 1 root root 47168 1120 02:49 ld.so.cache

-rw-r--r-- 1 root root 31303 710 2008 jwhois.conf

...중략...

lrwxrwxrwx 1 root root 10 59 2013 rc0.d -> rc.d/rc0.d

lrwxrwxrwx 1 root root 7 59 2013 rc -> rc.d/rc

-rw------- 1 root root 1 710 2008 at.deny

-rw-r--r-- 1 root root 0 710 2008 odbc.ini

-rw-rw-r-- 1 root disk 0 710 2008 dumpdates

-rw-r--r-- 1 root root 0 710 2008 Muttrc.local

-rw-r--r-- 1 root root 0 59 2013 wvdial.conf

-rw-r--r-- 1 root root 0 59 2013 cron.deny

-rw-r--r-- 1 root root 0 218 2009 environment

-rw-r--r-- 1 root root 0 113 2000 motd

-rw-r--r-- 1 root root 0 113 2000 exports

합계 3408

[root@sulinux ~]#

 

 

 

 

 

split

split는 지정된 파일을 주어진 방식대로 나누는(쪼개는, 조각내는) 명령어이다.

 

 

 

 

특정 파일을 나누는 방법으로 용량별로 나누는 방법, 행수로 나누는 방법 등이 있다.

 

 

 

 

이 명령어는 특정 파일의 용량이 너무 커서 (용량, 행 등의) 단위별로 나눌 필요성이 있거나 특정 목적에 의해 나누어서 사용해야 할 경우에 사용된다.

 

다음은 아무런 옵션 없이 split으로 특정 파일을 나눈 것이다.

 

 

 

 

이 경우에는 기본적으로 1000행씩 나누어서 저장하고, 파일명은 xaa, xab, xac, ... 등의 순서로 저장된다.

 

 

 

 

파일명은 기본 3문자로 생성되지만 파일명으로 사용할 문자의 개수도 지정이 가능하다.

 

 

 

 

 

[root@sulinux ~]#

합계 796

-rw-r--r-- 1 root root 808003 59 2013 termcap

[root@sulinux ~]# wc l termcap

19111 termcap

[root@sulinux ~]# split termcap

[root@sulinux ~]# ls l

합계 1624

-rw-r--r-- 1 root root 808003 1122 12:54 termcap

-rw-r--r-- 1 root root 45902 1122 12:56 xaa

-rw-r--r-- 1 root root 43487 1122 12:56 xab

-rw-r--r-- 1 root root 44428 1122 12:56 xac

-rw-r--r-- 1 root root 44969 1122 12:56 xad

-rw-r--r-- 1 root root 37138 1122 12:56 xae

-rw-r--r-- 1 root root 38419 1122 12:56 xaf

-rw-r--r-- 1 root root 42665 1122 12:56 xag

-rw-r--r-- 1 root root 39676 1122 12:56 xah

-rw-r--r-- 1 root root 45938 1122 12:56 xai

-rw-r--r-- 1 root root 40950 1122 12:56 xaj

-rw-r--r-- 1 root root 41904 1122 12:56 xak

-rw-r--r-- 1 root root 40688 1122 12:56 xal

-rw-r--r-- 1 root root 39524 1122 12:56 xam

-rw-r--r-- 1 root root 44569 1122 12:56 xan

-rw-r--r-- 1 root root 41384 1122 12:56 xao

-rw-r--r-- 1 root root 41421 1122 12:56 xap

-rw-r--r-- 1 root root 41050 1122 12:56 xaq

-rw-r--r-- 1 root root 49022 1122 12:56 xar

-rw-r--r-- 1 root root 41163 1122 12:56 xas

-rw-r--r-- 1 root root 3706 1122 12:56 xat

[root@sulinux ~]# wc l xaa

1000 xaa

[root@sulinux ~]# wc l xab

1000 xab

[root@sulinux ~]#

 

 

 

 

 

split에 사용할 수 있는 옵션은 다음과 같다.

 

옵 션

기 능

-b, --bytes=SIZE

지정된 바이트 단위로 파일을 자른다.

-l, --lines=number

지정된 행수 단위로 파일을 자른다.

-C, --line-bytes=SIZE

생성되는 파일에서 행들의 최대 바이트를 지정한다.

-a, --suffix-length=N

파일명의 길이를 지정한 문자수로 하여 파일을 생성한다.

 

다음은 파일을 지정한 행수로 나누어서 저장하는 사례이다.

 

 

 

 

[root@sulinux ~]# split l 20 TODO

[root@sulinux ~]#

 

 

 

 

 

다음은 특정 파일을 지정된 용량별로 나누어 저장하는 사례이다.

 

 

 

 

 

[root@sulinux ~]# split --bytes=1k TODO

[root@sulinux ~]#

 

 

 

 

 

다음은 특정 파일을 나눌 때에 자동으로 생성되는 파일명의 길이를 지정하는 사례이다.

 

 

 

 

 

[root@sulinux ~]# split a 5 --bytes=1k TODO

[root@sulinux ~]#

 

 

 

 

 

관련자료

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

공지사항


뉴스광장


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