複数行の変数を列として印刷します。

複数行の変数を列として印刷します。

クラスタから値を収集するスクリプトがあります。場合によっては、これらの値に複数の行があります。データの配置方法を指定する printf 形式がありますが、複数行を考慮しないため、ギャップが曲がります。

The data should look like this:

Service Group          AutoStart List          System List
foo                    sys1                    sys1
                       sys2                    sys2

代わりにこんな感じです。

Service Group          AutoStart List          System List
foo                    sys1                    
sys2                    sys1
sys2

自動起動リストとシステムリストは同じでなければなりませんが、どちらも正しい列に値を強制する方法を理解できませんでした。

sgheader="\n\033[4m\033[1m%-30s %-30s %-15s\033[0m\033[0m"
sgformat="\n%-30s %-30s %-15s"



printf "${sgheader}" "Service Group" "Autostart List" "System List" 
printf "${sgformat}" "${svcgroup}" "${autostrtlist}" "${hosts}"

ベストアンサー1

たぶん、次のようなものがあります。

svcgroup='foo' autostrtlist=$'sys1\nsys2' hosts=$'sys1\nsys2'
paste <(printf '%s\n' "$svcgroup") \
      <(printf '%s\n' "$autostrtlist") \
      <(printf '%s\n' "$hosts") | expand -t30

(ksh93/zsh/bash 構文)。または、次のシステムでPOSIXly /dev/fd/x

paste /dev/fd/3 3<<E3 /dev/fd/4 4<<E4 /dev/fd/5 5<<E5 | expand -t 30
$svcgroup
E3
$autostrtlist
E4
$hosts
E5

とは別にdashyash最新バージョンと同様に、サブシェルbashによって提供されるパイプの代わりに一時ファイルを使用するため、おそらくより効率的です(移植性が高いだけでなく)。

おすすめ記事