入力色を使用すると、熱出力を妨げるようです。なぜこれが起こり、もっと重要なのは解決策がありますか?
$ {
echo "$(tput bold)foo$(tput sgr0)" "$(tput bold)bar$(tput sgr0)"
echo bar foo
} | column -t
foo bar
bar foo
macosとubuntu 20.04で問題を再現しましたが、どちらもBSD列を使用しているようです。
ベストアンサー1
パイプを使用すると、cat -v
そのファイルストリームのすべての文字を表示できます。column
幅を計算するために使用します。
^[[1mfoo^[(B^[[m ^[[1mbar^[(B^[[m
bar foo
正しいアプローチは、すべてのコンテンツ生成をすべての形式(MVCモデルなど)から分離することです。タブなどの出力を生成するためにスペースが追加されるため、column
内容が変更されます。また、tput
端末にコマンドを追加します。これらの操作を分離することで、出力をファイルに保存したり、フォーマット機能から渡したり、コンソールに送信したり、他のターゲット用にフォーマットしたりできます。
しかし、幅の計算から特定の文字を除外するのもawk
良い練習です。column -t
以下で使用する正規表現は多くをtput
捉えますが、すべてではないことはほとんど確信しています。
$ cat tst.awk
BEGIN {
OFS = " "
}
{
nr = NR
for (i=1;i<=NF;i++) {
f[NR,i] = $i
gsub(/\x1B[^[:alpha:]]+[[:alpha:]]/,"",$i)
if (length($i) > col[i]) col[i] = length($i)
}
}
END {
for (i=1;i<=nr;i++) {
for (j=1;j<=length(col);j++) {
printf "%-"col[j]"s%s", f[i,j], (j==length(col)? ORS : OFS)
}
}
}
次に、最初の出力をパイプに接続します。awk -f tst.awk