はじめに
テキストの書式設定は、Linux ユーザーやシステム管理者にとって基本的なスキルです。データを構造化された読みやすい形式で提示する能力は、レポートの作成、出力の整理、情報の理解の容易化に不可欠です。
この実験では、Linux の強力なテキスト書式設定ツールである printf コマンドの使い方を学びます。フィールドの配置、幅の指定、数値の書式設定、エスケープシーケンスの使用など、様々な書式設定技術を探索します。これらのスキルは、スクリプト、データ処理、システム管理タスクのための構造化された出力を作成するのに役立ちます。
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
このコマンドは:
$(date +%Y-%m-%d)を使用して、現在の日付を YYYY-MM-DD 形式で取得します。printfでフォーマットします。date.txtという名前のファイルに出力を保存します。- ファイルの内容を表示します。
幅と配置を指定した文字列の書式設定
データを列や表形式で表示する場合、テキストの幅と配置を制御することが重要になります。このステップでは、文字列データのフィールド幅と配置を指定する方法を学びます。
幅を制御した文字列の書式指定子は、次のパターンに従います。
%[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 文字の幅で左揃えの文字列として 2 番目の列を書式設定します。%sは、標準の文字列として 3 番目の列を書式設定します。\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は数値を単純な 10 進整数として表示します。%05dは数値を 5 桁の 10 進整数として表示し、先頭に 0 を埋めます。
出力:
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- 改行\t- タブ\"- 二重引用符\\- バックスラッシュ\b- バックスペース
エスケープシーケンスの例を含むファイルを作成してみましょう。
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 または Unicode 文字を表す 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
## 出力ファイルを定義する
report_file="system_report.txt"
## 既存のレポートをクリアする
> $report_file
## 書式設定されたヘッダーを追加する
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 情報
printf "%-15s %s\n" "CPU:" "$(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2 | sed 's/^[ \t]*//')" >> $report_file
## メモリ情報
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_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
## システム稼働時間
uptime_info=$(uptime -p)
printf "%-15s %s\n" "Uptime:" "$uptime_info" >> $report_file
## プロセスの表を追加する
printf "\n%-6s %-10s %-8s %-6s %s\n" "PID" "USER" "CPU%" "MEM%" "COMMAND" >> $report_file
printf "%-6s %-10s %-8s %-6s %s\n" "--" "----" "----" "----" "-------" >> $report_file
## CPU 使用率が高い上位 5 つのプロセスを取得する
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 コマンドを使用する方法を学びました。以下のことを練習しました。
- 基本的な
printf構文と文字列の書式設定 - きれいな表形式の出力を得るためのフィールド幅と配置の制御
- 整数や浮動小数点数など、さまざまなタイプの数値の書式設定
- 出力に特殊文字を含めるためのエスケープシーケンスの使用
- これらのテクニックを組み合わせて、実用的なシステム情報レポートを作成する方法
これらのテキスト書式設定スキルは、シェルスクリプトで読みやすい出力を作成したり、レポートを生成したり、ターミナルで情報を整理するために不可欠です。printf コマンドを使用すると、テキストの表示方法を正確に制御できるため、Linux ユーザーやシステム管理者にとって強力なツールとなります。
Linux の学習を続ける中で、これらの書式設定テクニックは、スクリプトやコマンドラインアプリケーションでデータを明確かつプロフェッショナルに提示するために役立つことがわかるでしょう。



