본문 바로가기

Learning/└◆Shell Scripts

[Shell Scripting] 유닉스 명령어(4) 기타 명령어

________________________________________________________________________________

 

 

1 부 본쉘

 

1 장 유닉스 쉘

2 장 본쉘의 개요

3 장 본쉘의 동작

4 장 유닉스 명령어

5 장 본셀의 특징

6 장 본셀 프로그래밍

 

________________________________________________________________________________

 

 

4 장 유닉스 명령어

 

 

-----------------

1. grep 명령어

2. sed 명령어

3. awk 명령어

4. 기타 명령어

-----------------

 

 

내용 생략

4

기타 명령어

 

 

 

쉘 스크립트를 작성할 때 유용한 명령어를 몇가지만 익혀보자.

 

sort 명령어 정열할때 사용하는 명령어

cut 명령어 각라인의 필드를 자르는 명령어

paste 명령어 여러개의 파일들을 합치는 명령어

pr 명령어 파일의 출력결과를 다르게 출력하는 명령어

uniq 명령어 파일의 내용중 중복되는 부분들을 다루는 명령어

tr 명령어 파일의 내용을 변환(소문자->대문자, 대문자->소문자)하는 명령어

split 명령어 하나의 파일을 여러개로 쪼개는 명령어

 

 

 

(1). sort 명령어

 

NAME

sort - sort, merge, or sequence check text files

 

DESCRIPTION

The sort command sorts lines of all the named files together

and writes the result on the standard output.

 

Comparisons are based on one or more sort keys extracted

from each line of input. By default, there is one sort key,

the entire input line. Lines are ordered according to the

collating sequence of the current locale.

 

OPTIONS

-u Unique: suppresses all but one in each set

of lines having equal keys. If used with the

-c option, checks that there are no lines

with duplicate keys in addition to checking

that the input file is sorted.

 

-n Restricts the sort key to an initial numeric string,

consisting of optional blank characters, optional

minus sign, and zero or more digits with an optional

radix character and thousands separators (as defined

in the current locale), which is sorted by arithmetic

value. An empty digit string is treated as zero.

Leading zeros and signs on zeros do not affect order-

ing.

 

-r Reverses the sense of comparisons.

 

-b Ignores leading blank characters when determining

the starting and ending positions of a restricted

sort key. If the -b option is specified before

the first sort key option, it is applied to all

sort key options. Otherwise, the -b option can be

attached independently to each -k field_start,

field_end, or +pos1 or -pos2 option-argument (see

below).

 

-t char Use char as the field separator character. char

is not considered to be part of a field (although

it can be included in a sort key). Each

occurrence of char is significant (for example,

<char><char> delimits an empty field). If -t is

not specified, blank characters are used as

default field separators; each maximal non-empty

sequence of blank characters that follows a non-

blank character is a field separator.

 

-k keydef The keydef argument is a restricted sort

key field definition. The format of this

definition is:

 

-k field_start [type] [,field_end [type] ]

 

where:

 

field_start and field_end

 

define a key field restricted to a

portion of the line.

sort 명령어는 정열할 때 사용한다. 기본 정열 방식은 다음과 같다.

 

기본 정열은 오름 차순 정열이다.

특정한 필드를 지정하지 않는 이상 첫 번째 필드/두 번째 필드/세 번째 필드 순으로 정열한다.

문자열 정렬 방식이 기본이다.

 

(명령어 형식)

# sort [OPTIONS] filename

 

-------------------------------------------------------------------------------------

옵션 설명

-------------------------------------------------------------------------------------

-b space를 무시한다.

-u 중복된 행이 없도록 만든다. , 중복되는 내용의 행을 한 행만 남긴다.

-r 역순으로 정렬한다.

-t X 필드 구분 문자를 설정한다. X 자리에 그 문자가 들어간다.

-n 숫자의 크기 순으로 정렬한다.

-k # # 번째 필드를 기준으로 정열할 필드 번호를 정한다.

-------------------------------------------------------------------------------------

 

정열 기준

- 오름차순 정열 방식 <----> 내림차순 정열(-r)

- 필드(1/2/3...필드)정열 방식 <----> 지정된 필드 정열(-k)

- 문자열 정열 방식 <----> 숫자 정열(-n)

- 필드구분자(EX: 공백) <----> 지정된 필드구분자(-t)

 

# sort -r file1 /* 역순으로 정열 */

# sort -k 3 file1 /* 3번째 필드 기준 정열 */

# sort -k 3 -n file1 /* 3번째 필드 기준, 숫자 정열 방식 */

# sort -t : -k 3 -n /etc/passwd /* 필드 구분자는 ':', 3번째 필드 기준, 숫자 정열 방식 */

 

# sort -u file1 /* -u : uiq, 중복된 열을 하나로 출력 */

# sort file1 | uniq -d /* -d : duplicate, 중복된 데이터만 출력 */

# sort file1 | uniq -u /* 중복되지 않은 데이터만 출력 */

 

 

(많이 사용되는 명령어 형식)

# CMD | sort

# CMD | sort -r

# CMD | sort -r -k 3

# CMD | sort -r -k 3 -n

 

# cd /var

# du -sk * | sort -rn | more /* 용량이 큰순서에 맞게 정열 */

 

 

 

[EX1] sort 명령어 사용 예

# cat file1

test1 1 2 A

test2 2 3 B

test3 3 4 C

test1 1 2 A

test1 1 2 A

 

# sort -u file1 /* 중복된 열을 하나로 출력 */

test1 1 2 A

test2 2 3 B

test3 3 4 C

 

# sort file1 | uniq -d /* 중복된 데이터만 출력 */

test1 1 2 A

 

# sort file1 | uniq -u /* 중복되지 않은 데이터만 출력 */

test2 2 3 B

test3 3 4 C

 

 

(2). cut 명령어

 

NAME

cut - cut out selected fields of each line of a file

 

SYNOPSIS

cut -b list [-n] [file...]

 

cut -c list [file...]

 

cut -f list [-d delim] [-s] [file...]

 

DESCRIPTION

Use the cut utility to cut out columns from a table or

fields from each line of a file; in data base parlance, it

implements the projection of a relation. The fields as

specified by list can be fixed length, that is, character

positions as on a punched card (-c option) or the length can

vary from line to line and be marked with a field delimiter

character like <TAB> (-f option). cut can be used as a

filter.

 

Either the -b, -c, or -f option must be specified.

 

Use grep(1) to make horizontal ``cuts'' (by context) through

a file, or paste(1) to put files together column-wise (that

is, horizontally). To reorder columns in a table, use cut

and paste.

 

-c list The list following -c specifies character

positions (for instance, -c1-72 would pass

the first 72 characters of each line).

 

-d delim The character following -d is the field del-

imiter (-f option only). Default is tab.

Space or other characters with special mean-

ing to the shell must be quoted. delim can

be a multi-byte character.

 

-f list The list following -f is a list of fields

assumed to be separated in the file by a

delimiter character (see -d ); for instance,

-f1,7 copies the first and seventh field

only. Lines with no field delimiters will be

passed through intact (useful for table sub-

headings), unless -s is specified.

 

 

파일이나 표준입력으로 들어온 내용을 행 단위로 특정 열이나 특정 필드로 잘라서 표준 출력으로 보여준다.

 

(명령어 형식)

# cut [OPTIONS] filename

 

----------------------------------------------------------------------------------------

옵션 설명

----------------------------------------------------------------------------------------

-cN1,N2-N3,N4 컬럼에 의해서 행을 자를 때 사용한다. 쉼표(,)를 사용하여 여러 컬럼을

선택할 수 있고, 대쉬(-)에 의해서 자르는 컬럼의 범위를 설정 할 수 있

. 여기서 N1, N2, N3, N4는 숫자이다.

-fN 필드에 의해 행을 자른다. 여기서 NN번째 필드를 의미한다.

-dX 필드 구분을 위한 분리 문자를 설정한다. 여기서 X는 임의의 문자이고 특

수 문자나 스페이스를 필드 구분 문자로 사용하기 위해서는 큰 따옴표

(“”)를 사용한다. 예를 들어 -d 는 스페이스를 필드 분리 문자로 설정한

것이다.

----------------------------------------------------------------------------------------

 

# ls -1 | cut -f1 -d"." /* 필드구분자를 "."로 사용해서 첫번째 필드 출력 */

 

# cat /etc/passwd | cut -d":" -f1 /* passwd 파일의 첫번째 필드인 사용자 이름 출력 */

= awk -F: '{print $1}' /etc/passwd

# cat /etc/passwd | cut -c1 /* 파일의 첫번째 문자만 출력 */

# cat /etc/passwd | cut -c1,3 /* 파일의 첫번째 문자와 세번째 문자를 출력 */

# cat /etc/passwd | cut -c1-5 /* 파일의 첫번째 문자부터 다섯번째 문자까지 출력 */

 

# ifconfig eri0 | grep inet | awk '{print $2}' | cut -d. -f 4 /* 특정 NICIP 주소 추출 */

# cat /etc/hosts | grep loghost | cut -f 1 /* 서버 IP 주소 추출 */

[EX1] cut 명령어 사용예

# cat /etc/passwd | cut -d":" -f1 /* 구분자를 바꾸어서 첫번째 필드만 출력 */

root

daemon

bin

sys

adm

...... (중략) ......

 

# cat /etc/passwd | cut -c1 /* 첫번째 문자만 출력 */

r

d

b

s

a

..... (중략) ......

 

# cat /etc/passwd | cut -c1,3 /* 첫번째 문자, 세번째 문자 출력 */

ro

de

bn

ss

am

..... (중략) ......

 

# cat /etc/passwd | cut -c1-5 /* 첫번째 문자부터 5번째 문자까지 출력 */

root:

daemo

bin:x

sys:x

adm:x

..... (중략) .....

 

 

 

 

(3). paste 명령어

 

 

파일들의 행을 합쳐서 하나의 행으로 만들어 출력한다. paste 명령어를 사용하면 각 행의 끝에 분리 문자가 들어간 후에 파일의 각각의 행을 합쳐 하나의 행을 만들기 때문에 각 행의 길이를 일정하게 할 수 없다. 그래서 폭의 길이를 일정하게 해주기 위해서는 pr 명령어를 사용해야 한다.

 

(명령어 형식)

# paste [OPTIONS] file1 file2 .... > outfile

 

-------------------------------------------------------------------------------------------

옵션 설 명

-------------------------------------------------------------------------------------------

-d 파일들 사이의 분리 문자를 설정한다. 사용법은 cut 명령어의 -d 옵션과 같다.

-------------------------------------------------------------------------------------------

 

 

[EX] paste 명령어 사용예

# cat file1

1111 2222

3333 4444

 

# cat file2

5555 6666

7777 8888

 

# paste file1 file2

1111 2222 5555 6666

3333 4444 7777 8888

 

 

 

[EX2] cat 명령어를 통한 파일 합치기

# cat file1

1111 2222

3333 4444

 

# cat file2

5555 6666

7777 8888

 

# cat file1 file2 > file3

1111 2222

3333 4444

5555 6666

7777 8888

 

(4). pr 명령어

 

NAME

pr - print files

   

파일의 내용을 여러 형태로 변형하여 출력하기 좋은 형태로 만든다.

 

(명령어 형식)

# pr [OPTIONS] file1 file2 file3 .....

 

---------------------------------------------------------------------------------------

옵션 설 명

---------------------------------------------------------------------------------------

-m 여러 파일을 합칠때 한 파일의 일정한 컬럼을 차지하도록 만든다.

-number 파일의 한 행을 원하는 숫자만큼의 컬럼으로 나누어 출력한다. , 폭의

크기를 설정하는 것이다. 여기서 각 행은 위에서부터 아래로 배열된다.

-t 타이틀(title)없이 출력한다.

-w숫자 폭의 길이를 설정한다.

---------------------------------------------------------------------------------------

 

 

(세개의 파일 합치기)

# pr -t -m file1 file2 file3

 

 

 

(5). uniq 명령어

 

 

중복되는 행을 제거한다. uniq 명령어는 인접한 행만 비교하기 때문에 uniq 명령어를 사용하여 중복된 행을 제거하기 위해서는 uniq를 사용하기 전에 sort 명령어를 이용하여 그 내용을 정렬 시켜야 한다. (sort 명령어의 -u 옵션을 사용하는 경우 유용할 때가 많다.)

 

(명령어 형식)

# uniq [OPTIONS] inputfile [outputfile]

 

-------------------------------------------

옵션 설 명

-------------------------------------------

-u 중복되지 않는 행만 출력

-d 중복된 행만 출력

-------------------------------------------

 

# sort file1 | uniq -d /* 중복된 데이터만 출력 */

# sort file1 | uniq -u /* 중복되지 않은 데이터만 출력 */

(6). tr 명령어

 

 

표준 입력으로 입력을 받아서 문자열1의 문자열2의 문자로 변경하여 출력한다. , 문자열1의 첫문자는 문자열2의 첫문자로 변경되고, 나머지도 대칭적으로 변경된다. 문자열1의 길이가 긴 경우에는 문자열1의 대칭되지 않는 문자들은 문자열2의 마지막 문자로 변경된다.

 

(명령어 형식)

# tr [OPTIONS] 문자열1 문자열2

 

-----------------------------------------------------------------------------

옵션 설 명

-----------------------------------------------------------------------------

-c 문자열1을 제외한 문자들을 변경시킨다.

-d 문자열1의 문자들을 제거한다. 이때 문자열2는 사용하지 않는다.

-----------------------------------------------------------------------------

 

 

(대문자 -> 소문자 변환)

# cat temp | tr "[A-Z]" "[a-z]"

 

 

(소문자 -> 대문자 변환)

# cat temp | tr "[a-z]" "[A-Z]"

 

 

 

 

 

 

 

(7). split 명령어

 

파일을 원하는 행의 수 만큼씩 나눌때 사용한다. 일반적으로 split된 파일명은 x로 시작하는 3자리의 파일명이 된다.

 

(명령어 형식)

# split -숫자 filename

 

 

 

[EX1] split 명령어를 사용하여 파일을 라인별로 짜르기

# cd /test

# cp /etc/hosts /test

# split -3 hosts /* hosts 파일을 3줄씩 분리하여 파일을 생성한다. */

# ls

hosts xaa xab

 

# cat xaa

#

# Internet host table

#

 

# cat xab

::1 localhost

127.0.0.1 localhost

192.168.0.253 solaris253 solaris253.example.com loghost