[RHEL6] 파일 조작 명령어 2탄(colrm, column, comm, csplit, cut)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 파일 조작 명령어 2탄(colrm, column, comm, csplit, cut)

by 찬찬이 아빠 2020. 3. 31.
반응형
  6. colrm(특정  열 삭제)

 1) 경로 : /usr/bin/colrm

 2) 요약 : 파일에서 선택된 열(column)을 삭제하는 필터

 3) 사용 방법 : colrm [시작 열 번호] [종료 열 번호]

 4) 추가 설명

colrm 명령어 다음에 숫자가 하나면 지정한 숫자부터 끝까지 열을 삭제합니다. 시작 열 번호와 종료 열 번호를 지정하면, 시작 열부터 종료 열까지 삭제합니다.

 

uname -a 명령은 시스템 정보를 출력합니다. 이 중 첫 번째는 시스템의 타입을, 두 번째는 시스템 호스트 이름을 출력합니다. colrm 명령으로 호스트 이름만을 필터링해 봅니다.

# uname -a
Linux ns.chanchan.co.kr 2.4.14-1hl #1 2020. 03. 31 (화) 16:32:23 KST i686 unknown

 

먼저 맨 앞에 "Linux"를 삭제하기 위해 colrm 1 6을 쓰고, 다음으로 호스트 명 이후에 정보를 삭제하기 위해 colrm 19로 19열 이후는 모두 삭제합니다.

# uname -a | colrm 1 6 | colrm 19
ns.chanchan.co.kr

 

 

 

  7. column(파일 정렬)

 1) 경로 : /usr/bin/column

 2) 요약 : 텍스트 파일의 내용을 가로로 보기 좋게 정렬하여 출력

 3) 사용 방법 : collumn [옵션] [파일...]

 4) 옵션

 -c num : 지정한 숫자 만큼의 열(Column) 폭으로 포맷을 출력

 -s char : -t 옵션을 위한 열의 구분자로 지정한 문자를 사용

 -t : 입력되는 내용의 열 개수를 조사하여 출력 양식을 정함. 입력되는 내용의 열 수는 공백 문자로 구분

 -x : 가로로 먼저 나열하고, 세로로 나열

 

 5) 추가 설명

column 명령어는 열을 형식화하는 명령어입니다. 먼저 세로로 나열하고, 그 다음 가로로 나열합니다 텍스트의 결과에 적당한 탭 구분자를 넣어 보기 좋게 합니다.

 

다음은 ls -l 명령으로 출력되는 파일 목록 정보에 열 제목을 붙여 보았습니다. sed 1d 명령으로 합계 부분을 모두 삭제하고, printf 명령으로 각각의 필드에 대한 열 제목을 아래와 같이 추가하였습니다.

# printf "PERM LINKS OWNER GROUP SIZE MONTH DAY HH:MM NAME\n" ;ls -l | sed 1d
PERM LINKS OWNER GROUP SIZE MONTH DAY HH:MM NAME
-rw-------	1	root	root	1160	Mar 31 01:43 anaconda-ks.cfg
drwxr-xr-x	2	root	root	4096	Mar	31 01L55 Desktop
-rw-r--r--	1	root	root	4738	Mar	31 02L12 html_col

 

이 결과를 column -t 명령을 사용하여 정리할 때와 하지 않을 때로 비교하면 확연히 차이가 나는 것을 알 수 있습니다.

# (printf "PERM LINKS OWNER GROUP SIZE MONTH DAY HH:MM NAME\n" ;ls -l | sed 1d) | column -t
PERM		Links	OWNER	GROUP	SIZE	MONTH	DAY		HH:MM	NA,E
-rw-------	1		root	root	1160	Mar 	31 		01:43 	anaconda-ks.cfg
drwxr-xr-x	2		root	root	4096	Mar		31 		01L55 	Desktop
-rw-r--r--	1		root	root	4738	Mar		31 		02L12 	html_col

 

 

 

  8. comm(한 줄씩 비교)

 1) 경로 : /usr/bin/comm

 2) 요약 : 정렬된 두 파일을 한 줄씩 비교

 3) 사용 방법 : comm [옵션] 파일1 파일2

 4) 옵션

 -1 : 파일2를 기준으로 파일1과 비교하여 같지 않은 부분을 출력하고, 다음 열에 같은 부분을 출력

 -2 : 파일1을 기준으로 파일2와 비교하여 같지 않은 부분을 출력하고, 다음 열에 같은 부분을 출력

 -3 : 파일1과 파일2를 비교하여 첫 번째 열에 파일1의 유일한 부분과, 두 번재 열에 파일2에 유일한 내용을 출력

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

comm 명령어는 다목적 파일 비교 유틸리티로 이 명령을 수행하기 전에 비교할 두 파일이 정렬되어 있어야 정확하게 결과를 얻을 수 있습니다.

 

예제를 통해 살펴봅시다. 텍스트 파일 comm1과 comm2를 아래와 같이 만들어 봅니다.

# cat comm1
1
3
5
6
7
7

# cat comm2
2
4
6
7
7
8
9

 

-1 옵션을 사용해서 comm2를 기준으로 comm1과 다른 부분은 첫 번째 열에, 같은 내용은 2번째 열에 출력합니다.

# comm -1 comm1 comm2
2
3
		6
        7
        7
8
9

 

-2 옵션을 사용해서 comm1을 기준으로 첫 번째 열에 comm2와 다른 부분을 출력하고, 2번째 열에 같은 내용을 출력합니다.

# 채ㅡㅡ -2 채ㅡㅡ1 채ㅡㅡ2
1
3
5
		6
        7
        7

 

-12 옵션을 이용하여 comm1과 comm2의 공통된 내용을 출력합니다. 여기에 uniq 명령어로 열에 중보되는 내용을 삭제하고, comm3에 저장하고 확인합니다.

# comm -12 comm1 comm2
6
7
7

# comm -12 comm1 comm2 | uniq > comm3
# cat comm3
6
7

 

 

  9. csplit(파일 분할)

 1) 경로 : /usr/bin/csplit

 2) 요약 : 지정하는 기준을 바탕으로 파일늘 나눔

 3) 사용 방법 : csplit [옵션[... 파일 인자...

 4) 옵션

 - : 표준 입력으로투버 입려을 받음

 -b suffix, --suffix-format=suffix : 새롭게 생성되는 파일의 접미사를 지정. 보통 파일은 00으로 시작해서 99까지 생성됨. 다음과 같이 형식을 지정할 수 있음

  § %d, %i : 부호 있는 10진수

  § %u : 부호 없는 10진수

  § %o : 8진수

  § %x, %X : 16진수

 -f prefix, --prefix=prefix : 새롭게 생성되는 파일의 접두사를 지정할 수 있음. prefix00에서 prefix99까지 중 prefix 부분을 지정하는 것임

 -k, --keep-files : 생성 도중 에러가 발생하여도 새롭게 생성된 파일들을 유지

 -n, --digits=num : 생성되는 파일의 길이를 지정. 기본값은 두 자리

 -s, --quiet, --silent : 문자 개수를 출력하지 않음

 -z, --elide-empty-files : 빈 파일을 제거

 --help : 사용법 출력

 --versioin : 버전 정보 출력

 

 5) 추가 설명

csplit은 파일의 내용에서 지정하는 기준으로 파일을 여러 개로 나눕니다 아래에 csplit 명령어의 인수인 파일명 다음에 올 수 있는 인자를 설명하였습니다. 이 인자는 파일을 나누는 기준이 됩니다.

 

 § n : 현재 라인부터 n번째 라인까지의 범위를 새로운 파일로 생성

 § 정규 표현식/[+n/-n] : 현재 라인부터 정규 표현식을 포함하는 라인까지 파일을 생성. +n이면 정규 표현식을 기준으로 n번째 줄까지 더 포함하며, -n이면 정규 표현식을 기준으로 n번째 줄까지를 제외하게 됨

 § %정규 표현식%/[+n/-n] : 정규 표현식의 라인 앞 부분은 저장되지 않음

 § {n} : n번 반복

 § {*} : 입력이 있을 때까지 반복

 

예제를 통해 알아봅시다. 다음의 song.txt 파일은 노래 가사를 저장해 놓은 것입니다. 이 노래를 단락별로 나누어 파일로 저장해 보겠습니다.

# cat song.txt
song.1
어린 시절 우리 고왔던
시간 저 편의 추억들은

song.2
늘 행복하기를 모두 바라고 있어
수많은 축복에 미소 짓는
아름다운 내사랑

song.3
부드러운 손길 달콤한 속삭임
내가 원한 것은 그것만은 아니었지

 

이 파일을 각 단락 별로 나누어 보겠습니다.

# csplit song.txt %song.1% /song.2/ /song.3/
156
176
158

 

csplit 명령으로 xx00, xx01, xx02 파일이 생성되었습니다.

# cat xx00
song.1
어린 시절 우리 고왔던
시간 저 편의 추억들은

# cat xx01
song.2
늘 행복하기를 모두 바라고 있어
수많은 축복에 미소 짓는
아름다운 내사랑

# cat xx02
song.3
부드러운 손길 달콤한 속삭임
내가 원한 것은 그것만은 아니었지

 

 

  10. cut(필드 골라 보기)

 1) 경로 : /bin/cut

 2) 요약 : 파일에서 원하는 필드르 뽑아냄

 3) 사용 방법 : cut [옵션]... [파일]...

 4) 옵션

 -b, --bytes=LIST : 바이트 단위로 나타냄

 -c, --characters=LIST : 문자 단위로 나타냄

 -d, --delimiter=DELIM : 기본 필드 구분자는 탭이지만 이를 사용하지 않고 지정하는 필드 구분자를 사용

 -f, --fields=LIST : 지정한 필드만을 출력

 -s, --only-delimited : 필드 구분자에 포함되지 않는 행은 출력하지 않음

 --output-delimiter=STRING : 출력되는 필드 구분자(STRING)를 지정

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

cut 명령어는 awk에서 print $N과 비슷하지만,  awk보다 더 간단하게 사용할 수 있습니다. -b, -c, -f 옵션에서는 다음과 같이 특정 숫자 범위를 사용할 수 있습니다.

 

 § N : N번째

 § N- : N번째부터 마지막까지의 범위

 § N-M : N번째부터 M번째까지의 범위

 § -N : 첫 번째부터 N번째까지의 범위

 

uname -a 명령으로 보여지는 시스템 정보에서 cut 명령을 이용하여 OS와 커널 버전만 보이게 할 수 있습니다. 유의할 점은 -d 옵션은 구분자를 공백으로 둔다는 의미이므로, 따옴표(')와 따옴표 사이는 공백으로 띄워야 구분할 수 있습니다. 또한 따옴표 대신 쌍따옴표(")로 묶을 수도 있습니다.

# uname -a
Linuxuser-desktop 2.6.31-20-generic #58-Ubuntu SMP Mar 31 16:50:58 UTC 2020 i686 GNU/Linux

# uname -a | cut ?d ' ' -f1,3
Linux 2.6.31-20-generic

 

-f1,3은 공백으로 구분자를 두어 첫 번째와 세 번째 필드만 뽑아서 본다는 의미입니다.

 

만일 -f3- 이라면 세 번째 필드부터 마지막까지 본다는 의미이고, -f-3은 첫 번째부터 세 번째 필드까지, -f1-3은 첫 번째, 두 번째, 세 번째 필드만 본다는 의미입니다.

 

/etc/mtab 파일의 내용 중 마운트 된 파일 시스템의 목록만 뽑아서 살펴 볼 수도 있습니다.

# cat /etc/mtab | cut -d" " -f1,2
/dev/sda1 /
proc /proc
none /sys
none /sys/fs/fuse/connections
none /sys/kernel/debug
none /sys/kernel/security
udev /dev
none /dev/pts
none /dev/shm
none /var/run
none /var/lock
none /lib/init/rw
/dev/sda4 /build
반응형

댓글