[RHEL6] 파일 조작 명령어 4탄(paste, pr, rev, sdiff, sort)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 파일 조작 명령어 4탄(paste, pr, rev, sdiff, sort)

by 찬찬이 아빠 2020. 4. 2.
반응형
  16. paste(파일 합치기)

 1) 경로 : /usr/bin/paste

 2) 요약 : 파일의 줄을 합침

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

 4) 옵션

 -d, --delimiters=char : 지정한 문자(char)로 열을 구분

 -s, --serial : 파일을 가로를 기준으로 하여 일렬로 합침

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

paste 명령어는 파일의 라인들을 합쳐 출력합니다. 아래는 test1과 test2 두 파일이 있다고 가정합니다.

# cat test1
1111 3333
5555 7777
9999 9999

# cat test2
2222 4444
6666 8888
0000 0000

 

아래는 각 파일을 행을 기준으로 합쳐 출력합니다.

# paste test1 test2
1111 3333 2222 4444
5555 7777 6666 8888
9999 9999 0000 0000

 

-s 옵션은 파일의 몯느 내용을 가로로 출력합니다.

# paste -s test1 test2
1111 3333 5555 7777 9999 9999
2222 4444 6666 8888 0000 0000

 

아래는 루트 디렉터리(/)에 있는 모든 디렉터리를 세미콜론(;)을 구분으로 하나의 열에 출력합니다.

# ls / | paste -d ';' -s
bin;boot;CD-ROM;dev;etc;home;lib;lost+found;media;mnt;opt;proc;root;sbin;selinux;srv;sys;tmp;usr;var

 

 

 

  17. pr(파일 인쇄 설정)

 1) 경로 : /usr/bin/pr

 2) 요약 : 텍스트 파일을 인쇄할 수 있는 표준 출력으로 변환

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

 4) 옵션

 -COLUMN, --columns=COLUMN : 열의 행을 값(COLUMN)만큼 지정. 기본값은 1

 -a, --across : -COLNUM과 함께 세로보다 가로로 출력

 -c, --show-control-chars : 보이지 않는 문자들을 프린트 가능한 문자로 변환

 -d, --double-space : 공백을 더블 스페이스로 출력

 -D, --date-format=FORMAT : 머리말의 날짜 형태(FORMAT)을 지정

 -e[char[width]], --expand-tabs[=char[width]] : 탭의 너비(width)를 지정. 기본값 8

 -F, -f, --form-feed : 줄 바꿈 문자 대신 용지 공급문자(form feed)를 사용

 -h header, --header=header : 머리말(header)을 지정

 -i[char[width]], --output-tabs[=width]] : 공백을 탭으로 변경. 너비(width)는 탭 문자의 크기를 지정. 기본값 8

 -J, --join-lines : 모든 행을 합침, 이는 -W 옵션을 무시

 -l(엘) page_length, --length=page_length : 쪽 길이(page_length)를 지정. 기본값은 66행

 -m, --merge : 하나의 파일 형태로 출력

 -n[delimiter[digits], --number-lines[=demimiter[digits] : 행의 번호를 출력. 구분자(delimiter)를 지정하고 (기본값은 탭) 너비(width)를 지정. 기본값 5

 -o(오) width, --indent=width : 들여쓰기 너비(width)를 지정. 기본값 0

 -r, --no-file-warning : 경고 메시지를 출력하지 않음

 -s[delimiter], --separator[=delimiter] : 열의 구분자(delimiter)를 지정. 기본값은 탭

 -t, --omit-header : 쪽 머리말과 고리말을 생략

 -T, --show-nonprinting : -t 옵션과 비슷하나 용지 공급 문자(form feed)까지 제거

 -v, --show-nonprinting : 출력되지 않는 문자를 출력 가능한 문자로 변환

 -w page_width, --width=page_width : 쪽의 행(page_width)을 지정. 기본값은 72. -s 옵션에 영향을 받음

 -W page_width, --page-width=page_width : 쪽의 행(page_width)를 지정. 기본값은 72. -J 옵션을 제외하고, -S, -s 옵션에 영향을 받지 않음

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

pr 명령어는 텍스트 파일을 프린트가 가능한 형태로 페이지를 나눕니다. 여기에는 페이지 번호, 날짜, 시간 및 파일 이름을 가진 머리말이 포함됩니다.

 

아래는 pr 명령어로 커널 소스의 문서 파일을 프린트가 가능한 형태로 저장합니다. 굵게 표시한 내용처럼 머리말 부분에 프린트 날짜와 텍스트 파일명, 페이지 번호를 볼 수 있습니다.

# pr Documentation/BUG-HUNTING > ~/BUG-HUNTING.TXT
# cat ~/BUG-HUNTING.TXT
2020-03-31 18:05	Documentation/BUG-HUNTING		1 페이지

Table of ontents
============================

Last updated: 30 March 2020

Contents
==========

- Introduction
- Devices not appearing
- Finding path that caused a bug
-- Finding using git-bisect
-- finding it the old way
- Fixing the bug

Introduction
=============================

Always try the latest kernel from kernel.org and build from source,
If you ar not confident in doing that please report the bug to your distribution vendor insted of to a kernel developer.
... 생략 ...

 

아래와 같이 내용을 화면에 출력하는 동시에 파이프(|)를 사용하여 프린터로 프린트 할 수 도 있습니다.

# pr ~/BUG-HUNTING.TXT | lpr

 

-h 옵션은 머리말의 제목을 지정합니다.

# pr -h "HOW TO Kernel Bug-Hunting" Documentation/BUG-HUNTING_TITLE.TXT

 

기존 BUG-HUNTING.TXT 파일과 BUG-HUNTING_TITLE.TXT 파일일 비교하여 봅니다.

 

아래와 같이 제목만 변경되었습니다.

# diff -Npur BUG-HUNTING.TXT BUG-HUNTING_TITLE.TXT
--- BUG-HUNTING.TXT			2020-03-31 18:05:30.4900590 -0700
+++ BUG-HUNTING_TITLE.TXT	2020-03-31 18:05:45.4315440 -0700
@@ -1,6 +1.6 @@


-2020-03-31 19:51		Documentation/BuG-HUNTING		1 페이지
+2020-03-31 19:52		HOW TO kernel Bug-Hunting		1 페이지

 

 

한 페이지를 넘거가는 파일의 내용을 한 장의 용지에 프린트 할 수 있습니다.

# pr -m -h "TEST PAGES" test1.txt test2.txt | lpr

 

 

  18. rev(파일 행 역순 출력)

 1) 경로 : /usr/bin/rev

 2) 요약 : 파일의 행을 기준으로 역순 출력

 3) 사용 방법 : rev [파일]

 4) 추가 설명

rev 명령어는 파일을 행 단위로 읽어 각 행의 문자를 역으로 변환하여 출력합니다. 아래와 같이 인자를 지정하지 않으면 표준 입력으로 변환할 문자를 입력 받습니다.

# rev
chanchan
father
is
superman

 

아래와 같은 테스트 파일이 있다고 가정합니다.

# cat test.txt
123456789
112233445566778899

 

rev 명령어는 위의 파일 내용을 역순으로 출력합니다.

# rev test.txt
987654321
998877665544332211

 

 

  19. sdiff(파일 비교)

 1) 경로 : /usr/bin/sdiff

 2) 요약 : 행을 기준으로 파일의 차이점을 비교

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

 4) 옵션

 -o(오) FILE, --output=FILE : 지정한 파일(FILE)로 내용을 출력

 -i, --ignore-case : 대소문자를 구분하지 않음

 -E, --ignore-tab-expansion : 파일 간의 탭 차이를 무시

 -b, --ignore-space-change : 파일 간의 공백 차이를 무시

 -W, --ignore-all--space : 모든 공백으 무시

 -B, --ignore-blank-lines : 파일 간의 빈 행의 차이를 무시

 -I(아이) RE, --ignore-matching-lines=RE : 지정한 값(RE)과 매치되는 것은 무시

 --strip-trailing-cr : 입력에서 줄 바꿈 문자를 제거

 -a, -text : 모든 파일을 텍스트로 취급

 -w NUM, --width=NUM : 열의 넓이(NUM)를 지정

 -l(엘), --left-column : 왼쪽의 열만 출력

 -s, --suppress-common-lines : 파일간 중복되는 행은 출력하지 않음

 -t, --expand-tabs : 탭을 공백으로 변환하여 출력

 --diff-program=PROGRAM : 파일 비교를 위한 프로그램(PROGRAM)을 지정

 -v, --version : 버전 정보 출력

 --help : 사용법 출력

 

 5) 추가 설명

sdiff 명령어는 diff와 비교하여 두 파일 간의 차이를 하나의 행으로 출력합니다.

-s 옵션은 파일 간에 중복되는 행은 출력하지 않습니다.

# sdiff -s hello.c hello_new.c
	printf("Hello, World\n"); | printf("Hello, New World\n");
    
# diff -Npur hello.c hello_new.c
--- hello.c			2020-04-01 17:50:54.890890 + 0900
--- hello_new.c		2020-04-01 17:52:22.234213 + 0900
@@ -2,6 +2,6 @@
int main()
{
-	printf("Jello, World\n");
+	printf("Hello, New World\n);
	return 0;
}

 

 

 

  20. sort(내용 정렬)

 1) 경로 : /bin/sort

 2) 요약 : 텍스트 파일의 내용을 알파벳 순서대로 정렬

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

 4) 옵션

<정렬 옵션>

 -b, --ignore-leading-blanks : 공백을 무시

 -d, --dictionary-order : 공백과 알파벳 문자의 순서를 비교

 -f, --ignore-case : 모든 문자를 소문자로 인식

 -g, --general-numeric-sort : 숫자 값을 비교 정렬

 -i, --ignore-nonprinting : 프린트 가능한 문자만 비교

 -M, --month-sort : 날짜(월) "알 수 없는 비교 값" < "JAN" < ... < "DEC" 순서로 정렬

 -n, --numeric-sort : 숫자를 기준으로 정렬

 -r, --reverse : 결과를 역으로 출력

 

<또 다른 옵션>

 -c, --check : 파일이 정렬되어 있는지 아닌지 검사

 -k, --key=pos1[,pos2] : 시작 위치(pos1)와 마지막 위치(pos2)를 지정

 -m, --merge : 복수의 입력 파일을 병합

 -o(오), --output=file : 결과를 지정한 파일(file)에 저장

 -S, --buffer-size=size : 메인 메모리의 버퍼 크기(size)를 지정

 -t, --field-separator=sep : 필드 구분지(sep)를 지정

 -T, --temporary-directory=dir : 기본값인 $TMPDIR 대신에 임시 디렉터리(dir)를 지정

 -u, --unique : 필드 내에서 중복되는 값을 제거하고 출력

 --help : 사용법 출력

 --version : 버전 정보 출력

 

 5) 추가 설명

sort 명령어는 파일 내용을 분석하여 행을 기준으로 구분하고 결과를 정렬하여 출력합니다. 만일 입력 파일이 두 개 이상이면 파일을 병합하여 하나의 파일로 인식합니다. 아래는 /etc/ 디렉터리의 내용을 정렬하여 출력합니다.

# ls /etc/ | sort | more
CORBA
DIR_COLORS
FreeWnn
Muttrc
X11
a2ps-site.cfg
a2ps.cfg
adjtime
alchemist
aliases
aliases.db
aliases.rpmnew
aliases.rpmsave
amanda
amandates
amd.conf
amd.net
---More---

 

-u 옵션은 필드 내에서 중복되는 행을 제거합니다. 이는 uniq 명령어와 같습니다.

# cat sortfile
1234
1234
1233

1222
1234
1222
12345

# sort -u sortfile
1222
1233
1234
12345

 

아래와 같이 대소문자로 구분된 이메일 주소들이 있다고 가정합니다.

# cat sortfile2
111
122
123
admin@chanchan.co.kr
ADmin@chanchan.co.kr
ADMIN@CHANCHAN.CO.KR

 

-f 옵션은 대소문자로 구별하지 않고 결과를 하나의 이메일 주소로 출력합니다.

# sort -fu sortfile2
111
122
123
admin@chanchan.co.kr
반응형

댓글