Infra Engineer

標準出力の整形 ~fmtコマンド・prコマンド~
2021.10.06
Lv1

標準出力の整形 ~fmtコマンド・prコマンド~

本記事の対象者

LPIC level1習得を目指す初学者の方
コマンドの基本的な用途について、要点を絞って解説します。


今回の内容

今回は、fmtコマンドとprコマンドについて解説します。

・fmtコマンド
・prコマンド
まとめ
確認問題

fmtコマンド

fmtコマンドは、標準出力の文章を整形するフィルターです。ファイルそのものに変更を加えるわけではなく、出力を変換します。
デフォルトでは1行75文字に整形します。単語を途中で区切ることはしません。75文字が単語の途中になってしまう場合は、その単語の前で改行されます。

fmt
意味 文章を整形する。(デフォルトは1行75文字に揃える)
書式 fmt [オプション] ファイル

主なオプションは以下の通りです。

オプション
-w 1行あたりの文字数を指定する
-t 連番(1.やa.)が振られている文章を連番ごとに整形する
例①)
オプションなしで実行。
[root@localhost ~]# fmt /etc/passwd
root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP
User:/var/ftp:/sbin/nologin nobody:x:65534:65534:Kernel Overflow
User:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin

10行目・11行目がfmtによって改行されている部分となります。

例①)
1行20文字を指定して実行
[root@localhost ~]# fmt -w20 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP
User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel
Overflow
User:/:/sbin/nologin

1行あたりの文字数が極端に少ない部分がありますが、もともと改行されている部分はfmtを使用しても改行されます。

prコマンド

prコマンドは、標準出力にページをつけて表示するコマンドです。主に印刷用の整形に利用されます。

pr
意味 印刷用のページを付与、ページ当たりの行数をそろえて出力する(デフォルトは1ページ66行)
書式 pr [オプション] ファイル

主なオプションは以下の通りです。

オプション
-w 1行あたりの文字数を指定する
-t 連番(1.やa.)が振られている文章を連番ごとに整形する
例①)
オプションなしで実行。
[root@localhost ~]# pr /etc/passwd


2021-09-17 23:56                   /etc/passwd                    Page 1


root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:65534:65534:Kernel Overflow User:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin
systemd-resolve:x:193:193:systemd Resolver:/:/sbin/nologin
tss:x:59:59:Account used for TPM access:/dev/null:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
geoclue:x:997:995:User for geoclue:/var/lib/geoclue:/sbin/nologin

ページの最初に、出力した日時、ヘッダ文字列、ページ数が表示されているのが分かるかと思います。

例①)
2ページ目から6ページ目を表示
[root@localhost ~]# pr +2:6 /etc/httpd/conf/httpd.conf


2021-05-19 21:31            /etc/httpd/conf/httpd.conf            Page 2


# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.conf

#
# If you wish httpd to run as a different user or group, you must run
# httpd as root initially and it will switch.
#
# User/Group: The name (or #number) of the user/group to run httpd as.
# It is usually good practice to create a dedicated user and group for
# running httpd, as with most system services.
#
User apache
Group apache

# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.

出力が長くなってしまうので割愛しますが、「+始め:終わり」という指定方法があります。
該当のページのみ印刷したいときに便利ですね。

まとめ

今回は出力を整形するコマンド2つを見てきました。
実際に使用する頻度はというと…そこまで多くはありませんが、仮に印刷等が必要になった場合はprコマンドは便利に使用できそうな予感がします。
fmtコマンドは逆に見づらくなってしまうこともありますので、一長一短だと思います。

確認問題

問題

印刷用ヘッダやページ数を含めて出力を行うコマンドは次のうちどれか。

A) fmt
B) pr
C) head
D) print

解答・解説
答え:B

A) ⇒ 標準出力を整形しますが、印刷用ヘッダやページ数は表示されません。
B) ⇒ 正解です。
C) ⇒ 行頭のみ出力をしたい場合に使用するコマンドです。
D) ⇒ Linuxコマンドとしては存在しないコマンドです。