use*_*551 6 columns text-formatting
$ echo 'a b' | column -t
a b
Run Code Online (Sandbox Code Playgroud)
输出之间a和之间有 2 个空格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
Run Code Online (Sandbox Code Playgroud)
预期的
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
Run Code Online (Sandbox Code Playgroud)
注意:请不要给出sed适用于这种特定情况的技巧。关于 SE 的问题应该对其他人有用,而不仅限于高度特定的数据格式。
您可以修剪只有最后一个空格字符的任何系列的空格字符; 像这样:
sed 's/\( *\) /\1/g'
Run Code Online (Sandbox Code Playgroud)
而且由于您总是连续至少有两个空格字符,因此这将始终可以按照您的意愿修剪拆分:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
为了真正展示如何sed遵守规则,我们可以将我们的列的几个副本逐一添加,每个额外的获得一个空间偏移量......
column -t <input | sed 's/.*/& & &/;s/\( *\) /\1/g'
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
试试这个方法:
$ echo 'a b' | column -t -s ''
a b
Run Code Online (Sandbox Code Playgroud)
来自专栏手册页:
-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
Run Code Online (Sandbox Code Playgroud)
上次更新的命令(对不起,伙计,但它是一个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
Run Code Online (Sandbox Code Playgroud)