Linux 텍스트 형식 지정

LinuxBeginner
지금 연습하기

소개

텍스트 형식 지정은 Linux 사용자 및 시스템 관리자에게 필수적인 기술입니다. 데이터를 구조화되고 읽기 쉬운 형식으로 표시하는 능력은 보고서 작성, 출력 구성, 그리고 정보를 더 쉽게 이해할 수 있도록 하는 데 필수적입니다.

이 랩에서는 Linux 의 강력한 텍스트 형식 지정 도구인 printf 명령어를 사용하는 방법을 배우게 됩니다. 필드 정렬, 너비 지정, 숫자 형식 지정, 이스케이프 시퀀스 사용을 포함한 다양한 형식 지정 기술을 탐구할 것입니다. 이러한 기술은 스크립트, 데이터 처리 및 시스템 관리 작업에 적합한 구조화된 출력을 생성하는 데 도움이 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 97%의 긍정적인 리뷰율을 받았습니다.

printf 기본 사항 소개

Linux 의 printf 명령어는 데이터를 형식 지정하고 출력하는 데 사용됩니다. 더 간단한 echo 명령어와 달리, printf는 텍스트가 어떻게 나타나는지에 대한 정밀한 제어를 제공합니다.

이 단계에서는 printf 명령어의 기본 구문을 배우고 첫 번째 형식 지정된 출력을 생성합니다.

먼저, 프로젝트 디렉토리로 이동합니다:

cd ~/project/text_formatting

printf의 기본 구문은 다음과 같습니다:

printf "format" arguments

여기서:

  • "format"은 텍스트와 형식 지정자를 포함하는 문자열입니다.
  • 형식 지정자는 %로 시작하며 인수가 어떻게 형식 지정되어야 하는지 정의합니다.
  • arguments 는 형식 지정될 값입니다.

간단한 예제를 만들어 보겠습니다:

printf 'Hello, %s!\n' "World"

이 명령어에서:

  • %s는 문자열에 대한 형식 지정자입니다.
  • "World"는 %s를 대체하는 인수입니다.
  • \n은 끝에 새 줄을 추가합니다.

다음과 같은 출력을 볼 수 있습니다:

Hello, World!

이제 여러 인수를 사용해 보겠습니다:

printf 'Name: %s, Role: %s\n' "Alice" "Engineer"

출력:

Name: Alice, Role: Engineer

형식 지정된 텍스트를 파일에 저장해 보겠습니다:

printf 'Today_s date: %s\n' "$(date +%Y-%m-%d)" > date.txt
cat date.txt

이 명령어는:

  1. $(date +%Y-%m-%d)를 사용하여 현재 날짜를 YYYY-MM-DD 형식으로 가져옵니다.
  2. printf 로 형식을 지정합니다.
  3. 출력을 date.txt라는 파일에 저장합니다.
  4. 파일 내용을 표시합니다.

너비 및 정렬을 사용한 문자열 형식 지정

데이터를 열 또는 표로 표시할 때 텍스트의 너비와 정렬을 제어하는 것이 중요해집니다. 이 단계에서는 문자열 데이터에 대한 필드 너비와 정렬을 지정하는 방법을 배우게 됩니다.

너비 제어가 있는 문자열에 대한 형식 지정자는 다음 패턴을 따릅니다:
%[flags][width]s

여기서:

  • [width]는 최소 필드 너비를 지정합니다.
  • [flags]는 정렬 및 기타 옵션을 제어합니다 (-는 왼쪽 정렬).

형식 지정된 열이 있는 파일을 만들어 보겠습니다:

touch formatted_names.txt
printf "%-15s %-10s %s\n" "First Name" "Last Name" "Department" >> formatted_names.txt
printf "%-15s %-10s %s\n" "John" "Smith" "Engineering" >> formatted_names.txt
printf "%-15s %-10s %s\n" "Mary" "Johnson" "Marketing" >> formatted_names.txt
printf "%-15s %-10s %s\n" "Robert" "Williams" "Finance" >> formatted_names.txt
cat formatted_names.txt

이 예제에서:

  • %-15s는 첫 번째 열을 너비가 15 자인 왼쪽 정렬된 문자열로 형식 지정합니다.
  • %-10s는 두 번째 열을 너비가 10 자인 왼쪽 정렬된 문자열로 형식 지정합니다.
  • %s는 세 번째 열을 표준 문자열로 형식 지정합니다.
  • \n은 끝에 새 줄을 추가합니다.

출력은 정렬된 열이 있는 깔끔한 표를 표시합니다:

First Name      Last Name  Department
John            Smith      Engineering
Mary            Johnson    Marketing
Robert          Williams   Finance

왼쪽 정렬과 오른쪽 정렬의 차이점을 보려면 다음을 시도해 보세요:

printf "Left aligned:  '%-10s'\n" "text"
printf "Right aligned: '%10s'\n" "text"

출력:

Left aligned:  'text      '
Right aligned: '      text'

숫자 및 소수점 값 형식 지정

printf 명령어는 정수 및 부동 소수점 값을 포함하여 숫자를 형식 지정하기 위한 다양한 옵션을 제공합니다. 이 단계에서는 숫자 데이터의 표시를 제어하는 방법을 배우게 됩니다.

정수의 경우 기본 형식 지정자는 %d입니다. 형식 지정된 숫자가 있는 파일을 만들어 보겠습니다:

touch numerical_data.txt
printf "Decimal: %d, Padded: %05d\n" 42 42 > numerical_data.txt
cat numerical_data.txt

이 예제에서:

  • %d는 숫자를 단순한 십진 정수로 표시합니다.
  • %05d는 숫자를 선행 0 으로 채워진 5 자리 십진 정수로 표시합니다.

출력:

Decimal: 42, Padded: 00042

부동 소수점 숫자의 경우 %f를 사용하고 정밀도를 제어할 수 있습니다:

printf "Float: %f, Rounded: %.2f\n" 3.14159 3.14159 >> numerical_data.txt
cat numerical_data.txt

이 예제에서:

  • %f는 전체 부동 소수점 숫자를 표시합니다.
  • %.2f는 소수점 2 자리로 반올림된 부동 소수점 숫자를 표시합니다.

전체 파일에는 이제 다음이 포함됩니다:

Decimal: 42, Padded: 00042
Float: 3.141590, Rounded: 3.14

또한 다른 숫자 시스템으로 숫자를 형식 지정할 수 있습니다:

printf "Decimal: %d, Hexadecimal: %x, Octal: %o\n" 16 16 16 >> numerical_data.txt
cat numerical_data.txt

파일에 추가된 출력:

Decimal: 16, Hexadecimal: 10, Octal: 20

이스케이프 시퀀스 사용

printf 명령의 이스케이프 시퀀스를 사용하면 형식 지정된 텍스트에 특수 문자 및 제어 코드를 포함할 수 있습니다. 이 단계에서는 다양한 이스케이프 시퀀스를 사용하는 방법을 배우게 됩니다.

일반적인 이스케이프 시퀀스에는 다음이 포함됩니다:

  • \n - 줄 바꿈 (Newline)
  • \t - 탭 (Tab)
  • \" - 큰따옴표 (Double quote)
  • \\ - 백슬래시 (Backslash)
  • \b - 백스페이스 (Backspace)

이스케이프 시퀀스의 예제가 있는 파일을 만들어 보겠습니다:

touch escape_sequences.txt
printf "Lines:\nFirst line\nSecond line\n" > escape_sequences.txt
printf "Tabs:\tColumn1\tColumn2\tColumn3\n" >> escape_sequences.txt
printf "Quotes: \"quoted text\"\n" >> escape_sequences.txt
cat escape_sequences.txt

출력은 이러한 이스케이프 시퀀스가 어떻게 작동하는지 보여줍니다:

Lines:
First line
Second line
Tabs: Column1 Column2 Column3
Quotes: "quoted text"

%b 형식 지정자를 사용하면 인수의 이스케이프 시퀀스를 해석할 수 있습니다:

printf "%b" "Newline: \\n becomes a\nnew line\n" >> escape_sequences.txt
cat escape_sequences.txt

%b 지정자는 ASCII 또는 유니코드 문자를 나타내는 16 진수 이스케이프 시퀀스를 해석하는 데에도 유용합니다:

printf "ASCII: %b\n" "\x48\x65\x6c\x6c\x6f" >> escape_sequences.txt
cat escape_sequences.txt

출력:

ASCII: Hello

형식화된 보고서 생성

이 마지막 단계에서는 지금까지 배운 기술을 결합하여 잘 형식 지정된 보고서를 만들 것입니다. 이는 이러한 형식 지정 기술을 실제 시나리오에 적용하는 방법을 보여줍니다.

시스템 정보 보고서를 생성하는 스크립트를 만들어 보겠습니다:

touch system_report.sh
chmod +x system_report.sh

nano 로 스크립트 파일을 엽니다:

nano system_report.sh

스크립트에 다음 내용을 추가합니다:

#!/bin/bash

## Define the output file
report_file="system_report.txt"

## Clear any existing report
> $report_file

## Add formatted header
printf "=======================================\n" >> $report_file
printf "       %s        \n" "SYSTEM INFORMATION REPORT" >> $report_file
printf "       %s        \n" "Generated on: $(date)" >> $report_file
printf "=======================================\n\n" >> $report_file

## CPU Information
printf "%-15s %s\n" "CPU:" "$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | sed 's/^[ \t]*//')" >> $report_file

## Memory Information
total_mem=$(free -m | grep Mem | awk '{print $2}')
used_mem=$(free -m | grep Mem | awk '{print $3}')
printf "%-15s %d MB (Used: %d MB)\n" "Memory:" $total_mem $used_mem >> $report_file

## Disk Information
disk_info=$(df -h / | tail -1)
disk_size=$(echo $disk_info | awk '{print $2}')
disk_used=$(echo $disk_info | awk '{print $3}')
disk_percent=$(echo $disk_info | awk '{print $5}')
printf "%-15s %s (Used: %s, %s)\n" "Disk Space:" $disk_size $disk_used $disk_percent >> $report_file

## System Uptime
uptime_info=$(uptime -p)
printf "%-15s %s\n" "Uptime:" "$uptime_info" >> $report_file

## Add a table of processes
printf "\n%-6s %-10s %-8s %-6s %s\n" "PID" "USER" "CPU%" "MEM%" "COMMAND" >> $report_file
printf "%-6s %-10s %-8s %-6s %s\n" "--" "----" "----" "----" "-------" >> $report_file

## Get top 5 processes by CPU usage
ps aux --sort=-%cpu | head -6 | tail -5 | while read line; do
  pid=$(echo $line | awk '{print $2}')
  user=$(echo $line | awk '{print $1}')
  cpu=$(echo $line | awk '{print $3}')
  mem=$(echo $line | awk '{print $4}')
  cmd=$(echo $line | awk '{print $11}')
  printf "%-6s %-10s %-8.1f %-6.1f %s\n" "$pid" "$user" "$cpu" "$mem" "$cmd" >> $report_file
done

echo "Report generated: $report_file"

nano 를 저장하고 종료합니다 (Ctrl+O, Enter, Ctrl+X).

스크립트를 실행하여 보고서를 생성합니다:

./system_report.sh

생성된 보고서를 봅니다:

cat system_report.txt

보고서는 다양한 형식 지정 기술을 결합합니다:

  • 정리된 데이터 프레젠테이션을 위한 필드 너비 및 정렬
  • CPU 및 메모리 값에 대한 숫자 형식 지정
  • 가운데 정렬된 텍스트가 있는 헤더
  • 정렬된 열이 있는 표 형식 데이터

이 예제는 학습한 형식 지정 기술을 시스템 정보 보고를 위한 명확하고 읽기 쉬운 출력을 생성하는 데 어떻게 적용할 수 있는지 보여줍니다.

요약

이 랩에서는 Linux 에서 텍스트 형식을 지정하기 위해 printf 명령을 사용하는 방법을 배웠습니다. 다음을 연습했습니다:

  1. 기본 printf 구문 및 문자열 형식 지정
  2. 깔끔한 표 형식 출력을 위한 필드 너비 및 정렬 제어
  3. 정수 및 부동 소수점 값을 포함한 다양한 유형의 숫자 형식 지정
  4. 이스케이프 시퀀스를 사용하여 출력에 특수 문자 포함
  5. 이러한 기술을 결합하여 실용적인 시스템 정보 보고서 생성

이러한 텍스트 형식 지정 기술은 셸 스크립트에서 읽기 쉬운 출력을 생성하고, 보고서를 생성하며, 터미널에서 정보를 정리하는 데 필수적입니다. printf 명령은 텍스트가 표시되는 방식을 정밀하게 제어하여 Linux 사용자 및 시스템 관리자에게 강력한 도구를 제공합니다.

Linux 여정을 계속 진행하면서 스크립트 및 명령줄 응용 프로그램에서 데이터를 명확하고 전문적으로 표시하는 데 이러한 형식 지정 기술이 유용하다는 것을 알게 될 것입니다.