리눅스마스터2급강좌 : 파일정보 정렬 및 분할
작성자 정보
- 관리자 작성
- 작성일
컨텐츠 정보
- 3,134 조회
- 0 추천
- 목록
본문
리눅스마스터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 5월 9 2013 termcap -rw------- 1 root root 362031 2월 23 2006 services -rw-r--r-- 1 root root 250915 11월 21 04:02 prelink.cache -rw-r--r-- 1 root root 92812 7월 10 2008 Muttrc -rw-r--r-- 1 root root 47168 11월 20 02:49 ld.so.cache -rw-r--r-- 1 root root 31303 7월 10 2008 jwhois.conf ...중략... lrwxrwxrwx 1 root root 10 5월 9 2013 rc0.d -> rc.d/rc0.d lrwxrwxrwx 1 root root 7 5월 9 2013 rc -> rc.d/rc -rw------- 1 root root 1 7월 10 2008 at.deny -rw-r--r-- 1 root root 0 7월 10 2008 odbc.ini -rw-rw-r-- 1 root disk 0 7월 10 2008 dumpdates -rw-r--r-- 1 root root 0 7월 10 2008 Muttrc.local -rw-r--r-- 1 root root 0 5월 9 2013 wvdial.conf -rw-r--r-- 1 root root 0 5월 9 2013 cron.deny -rw-r--r-- 1 root root 0 2월 18 2009 environment -rw-r--r-- 1 root root 0 1월 13 2000 motd -rw-r--r-- 1 root root 0 1월 13 2000 exports 합계 3408 [root@sulinux ~]# |
|
|
|
|
②split
split는 지정된 파일을 주어진 방식대로 나누는(쪼개는, 조각내는) 명령어이다.
특정 파일을 나누는 방법으로 용량별로 나누는 방법, 행수로 나누는 방법 등이 있다.
이 명령어는 특정 파일의 용량이 너무 커서 (용량, 행 등의) 단위별로 나눌 필요성이 있거나 특정 목적에 의해 나누어서 사용해야 할 경우에 사용된다.
다음은 아무런 옵션 없이 split으로 특정 파일을 나눈 것이다.
이 경우에는 기본적으로 1000행씩 나누어서 저장하고, 파일명은 xaa, xab, xac, ... 등의 순서로 저장된다.
파일명은 기본 3문자로 생성되지만 파일명으로 사용할 문자의 개수도 지정이 가능하다.
|
|
|
| [root@sulinux ~]# 합계 796 -rw-r--r-- 1 root root 808003 5월 9 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 11월 22 12:54 termcap -rw-r--r-- 1 root root 45902 11월 22 12:56 xaa -rw-r--r-- 1 root root 43487 11월 22 12:56 xab -rw-r--r-- 1 root root 44428 11월 22 12:56 xac -rw-r--r-- 1 root root 44969 11월 22 12:56 xad -rw-r--r-- 1 root root 37138 11월 22 12:56 xae -rw-r--r-- 1 root root 38419 11월 22 12:56 xaf -rw-r--r-- 1 root root 42665 11월 22 12:56 xag -rw-r--r-- 1 root root 39676 11월 22 12:56 xah -rw-r--r-- 1 root root 45938 11월 22 12:56 xai -rw-r--r-- 1 root root 40950 11월 22 12:56 xaj -rw-r--r-- 1 root root 41904 11월 22 12:56 xak -rw-r--r-- 1 root root 40688 11월 22 12:56 xal -rw-r--r-- 1 root root 39524 11월 22 12:56 xam -rw-r--r-- 1 root root 44569 11월 22 12:56 xan -rw-r--r-- 1 root root 41384 11월 22 12:56 xao -rw-r--r-- 1 root root 41421 11월 22 12:56 xap -rw-r--r-- 1 root root 41050 11월 22 12:56 xaq -rw-r--r-- 1 root root 49022 11월 22 12:56 xar -rw-r--r-- 1 root root 41163 11월 22 12:56 xas -rw-r--r-- 1 root root 3706 11월 22 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 ~]# |
|
|
|
|
관련자료
-
이전
-
다음