行を列に分割し、その一部が右揃えになりますか?

行を列に分割し、その一部が右揃えになりますか?

カンマ区切りのテキスト行を一部の列を右揃えの列に分割する簡単な方法はありますか?

ボーナスとして数字の形式を指定したいのですが、sedではそれほど難しくありません。

ベストアンサー1

アッ%42s私はprintf形式を考えました。始めるための簡単なスクリプトは次のとおりです。句にwidth[i]正の値を設定すると、BEGIN列は指定された幅(左揃え)を持ちます。負の場合、width[i]列はi右揃えで幅はです-width[i]。スクリプトは広いフィールドをインテリジェントに扱うわけではなく、後続のすべての列が行の右側に移動します。

awk -F, -vOFS= '
BEGIN {width[1]=-10; width[2]=8;}
{ for (i=1; i<=NF; i++) {$i = sprintf("%*s", width[i], $i)}
  print }'

数値フィールドがある場合は、追加フィールドを使用できます。printf形式

BSDユーティリティがある場合column(Debianが提供していますが、他のLinuxディストリビューションについてはわかりません。)簡単に使用できますcolumn -t -s ,。利点は、column列の幅を自動的に決定することです。しかし、少し後処理で得ることはできますが、複雑さがそれほど価値があるかどうかはわかりません。

Perlですべてを行うことができます。それ滞在施設が役立ちます。

一般的なUNIXツールを使用してテーブルをフォーマットするより強力な方法は次のとおりです。tbl、これは* roff(manページフォーマッタ)処理テーブルの一部です。ただし、入力をroffに変換する必要があるため、より複雑です。

もう一つの可能​​なツールはテキストモードブラウザです。w3m、テーブルレンダリングに堪能です。ここで入力をHTMLに変換する必要があります。

おすすめ記事