본문 바로가기

스터디/리눅스 커맨드라인

[리눅스] 21. 출력 포맷 지정

 

1. 간단한 포맷 툴

1) nl - 줄 번호 매기기

 iseungmin@iseungmin-ui-MacBookAir  ~  nl /etc/passwd | head                         
     1	##
     2	# User Database
     3	#
     4	# Note that this file is consulted directly only when the system is running
     5	# in single-user mode.  At other times this information is provided by
     6	# Open Directory.
     7	#
     8	# See the opendirectoryd(8) man page for additional information about
     9	# Open Directory.
    10	##

nl 프로그램은 단순히 줄 번호를 매기는 간단한 작업을 하는 툴이다.

nl은 번호를 붙일 때 논리적 페이지라는 개념을 제공한다. 이는 nl이 번호를 붙일 때 순서를 다시 처음부터 시작할 수 있도록 허용한다.
또한 옵션을 사용하면 특정 값 또는 제한된 범위 내에서 시작 번호를 설정 가능하고 그 포맷도 설정할 수 있다. 

논리적 페이지는 추가적으로 머리말, 본문, 꼬리말로 세분화된다. 각 영역마다 줄 번호를 재설정하거나 다른 형태로 설정할 수 있다.

nl 주요 옵션

  • -b style : 본문의 줄 번호에 스타일을 적용한다.
    • a : 모든 줄에 번호를 붙인다. 
    • t : 공백 줄이 아닌 경우에만 번호를 붙인다. 기본값
    • n : 번호를 붙이지 않는다.
  • -f style : 꼬리말의 줄 번호에 스타일을 적용한다. 기본값은 n.
  • -h style : 머리말의 번호에 스타일을 적용한다. 기본값은 n.
  • -i number : 페이지 번호의 증가량을 number로 설정한다. 기본값은 1.
  • -n format : 줄 번호 포맷을 설정한다.
    • ln : 0없이 왼쪽 정렬
    • rn : 0없이 오른쪽 정렬, 기본값
    • rz : 0 포함 오른쪽 정렬
  • -p : 각 논리 페이지의 시작 부분에서 페이지 번호를 재설정 못하게 한다.
  • -s string : string을 구분자로 만들기 위해 각 줄 번호의 끝에 추가한다. 기본값 탭
  • -v number : 각 논리 페이지의 첫째 불 번호를 Numberfh 로 설정한다. 기본값 1
  • -w width : width를 줄 번호 필드의 너비로 설정한다. 기본값 6

 

2) fold - 지정된 길이로 줄 나누기

폴딩은 텍스트 행을 지정된 길이로 나누는 절차다. 

 iseungmin@iseungmin-ui-MacBookAir  ~  echo "The quick brown fox jumped over the lazy dog." | fold -w 12    ✔  2768  01:59:18
The quick br
own fox jump
ed over the
lazy dog.
 iseungmin@iseungmin-ui-MacBookAir  ~  echo "The quick brown fox jumped over the lazy dog." | fold -w 12 -s
The quick
brown fox
jumped over
the lazy
dog.​
-w 옵션 : 지정된 만큼 구분해서 나눈다.
-s 옵션 : 줄 끝에 도달하기 전 마지막 공백에서 자른다.

 

3) fmt - 간단한 텍스트 포매터

파일이나 표준 입력을 허용하고 텍스트 열의 문장 포맷을 지정한다. 기본적으로, 공백 줄과 들여쓰기를 유지하면서 텍스트를 합치거나 채운다. 물론 텍스트 자르는 기능도 있다.
  • -c : crown margin 모드로 동작하게 한다. 즉 문단 첫 두 줄의 들여쓰기를 유지한다. 그 다음 줄부터는 두 번째 줄의 들여쓰기에 맞게 정렬된다.
  • -p string : string을 접두어로 줄을 시작하게 만든다.
  • -s : 분할 모드
  • -u : 간격을 균등하게 유지한다.
  • -w width : 열 구성 fold랑 같은 역할을 한다.

 

4) pr - 인쇄용 텍스트 구성하기

텍스트에 페이지 매기기 위해 사용된다.

텍스트 인쇄할 때, 종종 각 페이지의 처음과 끝에 여백을 주기 위해 여러 줄을 공백으로 출력 페이지를 구분하기를 원한다.
추가적으로 이 공백은 각 페이지에 머리말과 꼬리말을 삽입하기 위해 사용된다.

 

5) printf - 자료 출력 및 포맷 지정하기

printf 명령어는 파이프라인에서 사용되지도 않고(표전 입력을 허용하지 않는), 커맨드라인의 흔한 프로그램에서도 직접적으로 발견되지 않는다(대부분 스크립트에서 사용된다).

printf는 C프로그래밍 언어를 위해 개발되었다. 그리고 쉘을 포함하여 많은 프로그래밍 언어에서 구현되었다. 실제로 bash에는 printf가 내장되어 있다.
# 기본 양식
printf "format" arguments​


예를 하나 보면,

 iseungmin@iseungmin-ui-MacBookAir  ~  printf "hellow '%s'\n" world                                         ✔  2773  03:18:10
hellow 'world'

 

주요 printf 자료형 지정자

  • d : 부호를 가진 10진수 형태로 만든다.
  • f : 부동 소수점 수 형태로 만들고 출력한다.
  • o : 8진수 형태로 만든다.
  • s : 문자열 형태로 만든다.
  • x : 소문자 a에서 f를 사용해 16진수 형태로 만든다. 
  • X : x와 동일하지만, 대문자를 사용한다.
  • % : 상수 기호 %를 출력한다.(즉, %%를 명시)
 iseungmin@iseungmin-ui-MacBookAir  ~  printf "%d %f %o %s %x %X\n" 380 380 380 380 380 380                 ✔  2774  03:20:10
380 380.000000 574 380 17c 17C

 

 

 

 

 

 

 

 

1. /etc/passwd 경로를 읽어 행 번호를 매겨 표준 출력으로 보여주려고 할 때, 줄 번호를 너비 6으로 하고 각 줄 번호 끝에 - 문자가 출력되도록 하는 명령어는?

2. 포스트스크립트 파일을 PDF 파일로 변환할 수 있게 해주는 프로그램은?

3. printf "%06d, %+06.6f, %010.5f\n" 123 123 3.14156295의 출력 결과는?

 

1. nl -w 6 -s '-' /etc/passwd

2. ps2pdf 프로그램

3. 000123, +123.000000, 0003.14156