shellで出力フォーマットを整えたい

概要

sample.txt

Kim test
Charchile aaaaaa

上のようなテキストファイルを

test.sh

#/bin/sh

cat test.txt | while read line
do
    col1=`echo ${line} | cut -d ' ' -f 1`
    col2=`echo ${line} | cut -d ' ' -f 2`
    echo "Column1: ${col1} Column2: ${col2}"
done

上記のshellスクリプトで入力し、echoで 出力すると

Column1: Kim Column2: test
Column1: Charchile Column2: aaaaaa

となる。
このままだと、出力結果が見辛いので整えたい。

結論

#/bin/sh

cat test.txt | while read line
do
    col1=`echo ${line} | cut -d ' ' -f 1`
    col2=`echo ${line} | cut -d ' ' -f 2`
    printf "Column1: %9s Column2: %6s\n" ${col1} ${col2}
done

上記のようにprintfで出力する。
出力結果は

Column1:       Kim Column2:   test
Column1: Charchile Column2: aaaaaa

上のように、フォーマットを整えることができる。

出力方法

%9s%6sはそれぞれ9桁、6桁の右詰めで出力するということ。
¥nは改行

その他の出力方法

左詰め

printf "Column1: %-9s Column2: %-6s\n" ${col1} ${col2}

数字の前に-を挿入する

出力結果

Column1: Kim       Column2: test  
Column1: Charchile Column2: aaaaaa

0詰め

printf "Column1: %09s Column2: %06s\n" ${col1} ${col2}

数字の前に0を挿入する

出力結果

Column1: 000000Kim Column2: 00test
Column1: Charchile Column2: aaaaaa