expandはタブ区切りテキストファイルのデータを揃えて表示するコマンドだ。
このページではタブ区切りテキストファイルのデータを揃えて表示する方法を解説する。
目次
expandコマンドの基本
コマンドの基本動作
使い方は、次のとおりだ。
$ expand ファイル名
操作説明に入る前に次のコマンドでタブ区切りのテキストファイルを用意する。ぜひ、実際に操作してみよう。
$ echo -e "No-1\tTokyo\t1354098\nNo-2\tOsaka\t934765\nNo-3\tNagoya\t786592" > ex.txt
すると、次のようなテキストファイルが作成される。
タブ文字で区切られたテキストファイルex.txtの各列のデータを揃えて表示する場合は、次のコマンドだ。
$ expand ex.txt
タブ文字で区切られたテキストファイルex.txtの各列のデータを揃えて表示の情報を表示した。
ファイル名を入力せずにexpandコマンドのコマンド名だけでも動作する。
$ expand
この場合、キーボードなどの標準入力からのタブ区切りの入力に対し、各列のデータを揃えて表示する。
キーボードなどの標準入力からの入力にした場合は、Ctrl+Cのショートカットキーで解除する。
ちなみにオプションなしでは、catコマンドと見た目上、同じで8文字単位で揃う動作に見える。
しかし、catコマンドでファイルに内容を出力したものと、expandコマンドでファイルに出力したものでは、ファイル容量がexpandコマンドの方が多い。
catコマンドではタブ文字は1文字のタブ文字として出力しているが、expandコマンドでは、1文字のタブ文字を各列が揃うように複数の半角空白に置き換えているのだ。
catコマンドの出力結果をファイルex-cat.txt、expandコマンドの出力結果をファイルex-expand.txtとして出力したものをlsコマンドの-lオプションで表示し、ファイル容量、つまり文字数をカウントした。
catコマンドで変換したファイルの容量は56バイト、expandコマンドで変換したファイルの方が70バイトと大きいことがわかる。
expandコマンドのオプションたち
オプションの一覧
後から詳細をご紹介するが、まずは一覧で見てみよう。
オプション -t(オプション--tabs)
揃える文字数を指定する
オプション -i(オプション--initial)
行頭のタブ文字のみ変換する。
-tオプション(--tabsオプション):揃える文字数を指定する
揃える文字数を指定する書式は次のとおりだ。
$ expand -t 文字数 ファイル名
タブ文字で区切られたテキストファイルex.txtの各列のデータを3文字に揃えて表示する場合は、次のコマンドだ。
$ expand -t 3 ex.txt
タブ文字で区切られたテキストファイルex.txtの各列のデータを3文字に揃えて表示した。
ここで、注目してほしいのは3行目のNagoyaの786592の数値が1、2行目に比べて位置が右にずれている。
次の図は指定した3文字ごとに線を引いたものだ。
3文字区切りだとTokyoとOsakaは、次の数値までに空白の区切りを入れることができ12文字目から数値が表示できる。
Nagoyaは唯一6文字で次の区切りまで数値との間に空白を入れることができないために、その次の15文字目の区切りまで送られ、数値が配置される。
このように文字数が少ない指定をした場合は、それぞれの列が揃わない場合もあるので注意しよう。
-iオプション(--initialオプション):行頭のタブ文字のみ変換する
プログラムソースなどでは、視認性を良くするために行頭にタブ文字でインデントを入れている場合があり、そのような行頭のタブ文字のみ空白に変換することができる。
-iオプションの説明に入る前に次のコマンドで2行目の行頭にタブ文字が入っているテキストファイルを用意する。ぜひ、実際に操作してみよう。
$ echo -e "for\t(\$i=1;\$i<50;$i++)\t{\n\tfind_target\t(\$i)\t;\n}" > ex2.txt
すると、次のようなテキストファイルが作成される。
行頭のタブ文字のみ空白に変換するコマンドは次のとおりだ。
$ expand -i ファイル名
タブ文字でインデントされたテキストファイルex2.txtの行頭のタブ文字のみ空白に変換する場合は、次のコマンドだ。
$ expand -i ex2.txt
行頭の空白を無視しタブ文字で区切られたテキストファイルex.txtの各列のデータを揃えて表示した。
もう少し具体的に把握するために、半角空白を「-」に変換するtrコマンドをパイプし、動作を確認してみよう。
まず、catコマンドでテキストファイルex2.txtを見てみよう。
$ cat ex2.txt | tr " " "-"
結果、半角空白が入っていないため、「-」の表示はない。
次に、オプションなしのexpandコマンドでテキストファイルex2.txtを見てみよう。
$ expand ex2.txt | tr " " "-"
結果、すべてのタブ文字が半角空白に変換されたため、タブ文字の部分すべてが「-」に表示された。
最後に、-iオプションを付与したexpandコマンドでテキストファイルex2.txtを見てみよう。
$ expand -i ex2.txt | tr " " "-"
結果、行頭にタブ文字が入っている2行目のみのタブ文字が半角空白に変換されたため、2行目の行頭のみが「-」に表示された。
expand関連コマンド
最後にexpandコマンドに関連して、基本的なタブ区切りテキストファイルのデータを揃えて表示のコマンドも紹介しておく
unexpandコマンド
空白をタブに変換する
trコマンド
テキストファイル内の文字を置き換える
catコマンド
テキストファイルを縦方向に結合する。
pasteコマンド
テキストファイルを横方向に結合する。
sortコマンド
テキストファイルを並べ替える。
sedコマンド
行を置き換える。
grepコマンド
行を抽出する。
uniqコマンド
重複行を削除する。
まとめ
expandコマンドは様々な応用が利く。
タブ文字で区切られたログなどのデータを、半角空白の固定長で格納されているデータに変換できる。
また、プログラムソースなどの行頭インデントのためのタブを好みの長さの半角空白に一気に変換することもできる。
便利なコマンドなのでぜひ覚えておこう。