テーブル項目の長さが異なるため、非常に読みにくいヘッダーを含むタブ区切りのファイルがあります。本質的に少し似ているようです。
c1 c2 c3 c4
A 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
列の間隔をより広くし、列を読み取ることができる列とうまく整列して、より読みやすくする方法はありますか?
c1 c2 c3 c4
A 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
答え1
入力列が単純なスペース(ASCIIスペース0x20および/またはタブ0x09)で区切られ、空の列がない場合は、次のように単純です。
<infile column -t
c1 c2 c3 c4
ABC 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
ただし、column
キャリッジリターン(ASCII 0x0dまたは\r
)、フォームフィード(ASCII 0x0cまたは\f
)または垂直タブ(ASCII 0x0bまたは\v
)は区切り文字として扱われません。
列が一部の「スペース」([[:space:]]
たとえば[ \t\r\f\v]
、スペース、水平タブ、キャリッジリターン、フィード、または垂直タブ(改行ではない))で区切ることができる場合は、すべてのスペースを1つの区切り文字(デフォルトは空白)です。改行文字を行区切り文字と列区切り文字の両方に使用することはできません。
改行文字を除くと、次のように動作します。
<infile sed 's/[[:space:]]\+/ /g' | column -t
[…]
スペース区切り文字は範囲内で減らすことができます。
ソースファイルの列が単一の文字(タブ文字など)で区切られている場合は、シェルANSI C拡張子($'…'
)(実行中のシェルにその機能がある場合)を使用して、区切り文字として使用される文字を宣言できます。
次に、次を使用しますcolumn
。
<infile column -s $'\t' -t
列の出力区切り文字は常に空白です。
複数の連続区切り文字を許可する必要がある場合(空の列がある場合は便利です)(GNU)オプションを使用して、複数の-n
入力隣接区切り文字を単一の区切り文字にマージすることを無効にできます。
<infile column -s $'\t' -tn
ソースファイルが単一の文字ではなく複数の文字に分割されている場合は、スペースやタブなどの単一の文字に変換する追加の使用$'...'
なしでこれらの文字を定義できます。sed
<infile column -s $'\t ' -tn