用可变数量的空格替换制表符,保持对齐
Replace tab with variable amount of spaces, maintaining the alignment
我有一个制表符分隔的文件,由 7 列组成。
ABC 1437 1 0 71 15.7 174.4
DEF 0 0 0 1 45.9 45.9
GHIJ 2 3 0 9 1.1 1.6
我需要用可变数量的 space 字符替换制表符,以便保持列对齐。请注意,我 不 希望每个选项卡都被 8 space 替换。相反,我想要在第 1 行第 1 列(8 - 长度(ABC)= 5)之后 5 spaces,在第 1 行第 2 列(8 - 长度(1437))之后 4 spaces = 4), 等等
是否有 linux 工具可以帮我做,或者我应该自己写?
被称为 pr -e -t
的 POSIX 实用程序 pr 完全可以满足您的需求,并且 AFAIK 存在于每个 Unix 安装中。
$ cat file
ABC 1437 1 0 71 15.7 174.4
DEF 0 0 0 1 45.9 45.9
GHIJ 2 3 0 9 1.1 1.6
$ pr -e -t file
ABC 1437 1 0 71 15.7 174.4
DEF 0 0 0 1 45.9 45.9
GHIJ 2 3 0 9 1.1 1.6
并且选项卡显示为 ^I
s:
$ cat -ET file
ABC^I1437^I1^I0^I71^I15.7^I174.4$
DEF^I0^I0^I0^I1^I45.9^I45.9$
GHIJ^I2^I3^I0^I9^I1.1^I1.6$
$ pr -e -t file | cat -ET
ABC 1437 1 0 71 15.7 174.4$
DEF 0 0 0 1 45.9 45.9$
GHIJ 2 3 0 9 1.1 1.6$
有专用于此任务的命令对。
$ expand file
会做你想做的。对方unexpand -a
做相反的事情。两者都没有其他有用的选项。
使用 column
,正如 anubhava 在评论中所建议的那样,特别是使用 -t
和 -s
选项:
column -t -s $'\t' in_file
-s, --separator separators
Specify the possible input item delimiters (default is
whitespace).
-t, --table
Determine the number of columns the input contains and
create a table. Columns are delimited with whitespace, by
default, or with the characters supplied using the
--output-separator option. Table output is useful for
pretty-printing.
我有一个制表符分隔的文件,由 7 列组成。
ABC 1437 1 0 71 15.7 174.4
DEF 0 0 0 1 45.9 45.9
GHIJ 2 3 0 9 1.1 1.6
我需要用可变数量的 space 字符替换制表符,以便保持列对齐。请注意,我 不 希望每个选项卡都被 8 space 替换。相反,我想要在第 1 行第 1 列(8 - 长度(ABC)= 5)之后 5 spaces,在第 1 行第 2 列(8 - 长度(1437))之后 4 spaces = 4), 等等
是否有 linux 工具可以帮我做,或者我应该自己写?
被称为 pr -e -t
的 POSIX 实用程序 pr 完全可以满足您的需求,并且 AFAIK 存在于每个 Unix 安装中。
$ cat file
ABC 1437 1 0 71 15.7 174.4
DEF 0 0 0 1 45.9 45.9
GHIJ 2 3 0 9 1.1 1.6
$ pr -e -t file
ABC 1437 1 0 71 15.7 174.4
DEF 0 0 0 1 45.9 45.9
GHIJ 2 3 0 9 1.1 1.6
并且选项卡显示为 ^I
s:
$ cat -ET file
ABC^I1437^I1^I0^I71^I15.7^I174.4$
DEF^I0^I0^I0^I1^I45.9^I45.9$
GHIJ^I2^I3^I0^I9^I1.1^I1.6$
$ pr -e -t file | cat -ET
ABC 1437 1 0 71 15.7 174.4$
DEF 0 0 0 1 45.9 45.9$
GHIJ 2 3 0 9 1.1 1.6$
有专用于此任务的命令对。
$ expand file
会做你想做的。对方unexpand -a
做相反的事情。两者都没有其他有用的选项。
使用 column
,正如 anubhava 在评论中所建议的那样,特别是使用 -t
和 -s
选项:
column -t -s $'\t' in_file
-s, --separator separators
Specify the possible input item delimiters (default is
whitespace).
-t, --table
Determine the number of columns the input contains and
create a table. Columns are delimited with whitespace, by
default, or with the characters supplied using the
--output-separator option. Table output is useful for
pretty-printing.