「列」は、出力の列区切り文字として単一のスペースを使用するようにします。

「列」は、出力の列区切り文字として単一のスペースを使用するようにします。
$ echo 'a b' | column -t 
a  b

出力からのa間には2つのスペースがあります。可能であれば、分離のために1つのスペースしかどのようにb使用できますか?column

編集2:より多くのケースを含むようにデータを変更する

$ cat data 
1 2 b
20 12.5 something
300 12.8 as
600 16 asrgty
1200 4.9 srty
1800 33.5 sry
10000 1.5 sty
200000 1.5 sty
$ column -t < data
1       2     b
20      12.5  something
300     12.8  as
600     16    asrgty
1200    4.9   srty
1800    33.5  sry
10000   1.5   sty
200000  1.5   sty
$  column -t -s '' < data
1 2 b
20 12.5 something
300 12.8 as
600 16 asrgty
1200 4.9 srty
1800 33.5 sry
10000 1.5 sty
200000 1.5 sty
$ column -t -s ' ' < data
1       2     b
20      12.5  something
300     12.8  as
600     16    asrgty
1200    4.9   srty
1800    33.5  sry
10000   1.5   sty
200000  1.5   sty
$ column -t < data | sed -re 's/  / /g'
1    2   b
20   12.5 something
300   12.8 as
600   16  asrgty
1200  4.9  srty
1800  33.5 sry
10000  1.5  sty
200000 1.5  sty
$ column -t < data | sed -re 's/  / /'
1      2     b
20     12.5  something
300    12.8  as
600    16    asrgty
1200   4.9   srty
1800   33.5  sry
10000  1.5   sty
200000 1.5   sty

予想される

1      2    b
20     12.5 something
300    12.8 as
600    16   asrgty
1200   4.9  srty
1800   33.5 sry
10000  1.5  sty
200000 1.5  sty

sed注:この特定の状況に適用されるヒントを提供しないでください。 SEに関する質問は、非常に具体的なデータ型だけでなく他の人にも役立つはずです。

答え1

トリミングできます。最後の空白文字のみ存在する一連の空白文字。このように:

sed 's/\( *\) /\1/g'

常に連続して複数の空白文字があるため、必要に応じて分割が常に切り捨てられます。

入力する:

column -t -s\ <<\COLS | sed 's/\( *\) /\1/g'
0 3.1415926535 s
00 3.141592653 so
000 3.14159265 som
0000 3.1415926 some
00000 3.141592 somet
000000 3.14159 someth
0000000 3.1415 somethi
00000000 3.141 somethin
000000000 3.14 something
COLS

出力:

0         3.1415926535 s
00        3.141592653  so
000       3.14159265   som
0000      3.1415926    some
00000     3.141592     somet
000000    3.14159      someth
0000000   3.1415       somethi
00000000  3.141        somethin
000000000 3.14         something

このルールがどのように準拠しているかを実際に示すために、列のsed最後から最後まで複数のコピーを作成できます。各コピーはスペースオフセットを取得します。

入力する:

column -t <input | sed 's/.*/&  &   &/;s/\( *\) /\1/g'

出力:

0         3.1415926535 s 0         3.1415926535 s  0         3.1415926535 s
00        3.141592653  so 00        3.141592653  so  00        3.141592653  so
000       3.14159265   som 000       3.14159265   som  000       3.14159265   som
0000      3.1415926    some 0000      3.1415926    some  0000      3.1415926    some
00000     3.141592     somet 00000     3.141592     somet  00000     3.141592     somet
000000    3.14159      someth 000000    3.14159      someth  000000    3.14159      someth
0000000   3.1415       somethi 0000000   3.1415       somethi  0000000   3.1415       somethi
00000000  3.141        somethin 00000000  3.141        somethin  00000000  3.141        somethin
000000000 3.14         something 000000000 3.14         something  000000000 3.14         something

答え2

次の方法を試してください。

$ echo 'a b' | column -t -s ''
a b

列のマニュアルページから:

  • -t入力に含まれる列数を確認してテーブルを作成します。デフォルトでは、列は -s オプションで提供されるスペースまたは文字で区切られます。きれいな印刷表示に便利です。
  • -s-tオプションの列を区切るために使用される文字セットを指定します。

ビルドが完了すると、次のコマンドが機能します。

$ cat data | column -t | sed -r 's:  : :'
300  12.8
600  16.9
900  19.2
1200 24.9
1500 29.7
1800 33.5

最後に更新されたコマンド(申し訳ありませんが、コマンドなのでsed実行を使用する方法はありませんcolumn):

$ cat data | column -t | sed -r 's: ( [a-z,0-9]):\1:g'
1      2    b
20     12.5 something
300    12.8 as
600    16   asrgty
1200   4.9  srty
1800   33.5 sry
10000  1.5  sty
200000 1.5  sty

答え3

アドレス指定user 80551でコメントこの質問では:

@don_crissticolumn: invalid option -- 'o'

おそらくdon_crisstiでコメント例が切り捨てられました...

デフォルトの出力区切り文字は2つのスペースであるため、次のように実行できます。

echo 'a b' | column -t -o ' '

これは働きます:

echo 'a b' | column -t -o " "

例2:

column -t -o " " < data

関連情報