用可变数量的空格替换制表符,保持对齐

Kou*_*rev 1 bash awk whitespace tabs

我有一个制表符分隔的文件,由 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
Run Code Online (Sandbox Code Playgroud)

我需要的是用可变数量的空格字符替换制表符,以保持列对齐。请注意,我希望每个选项卡都被 8 个空格替换。相反,我想要第 1 行第 1 列(8 - 长度(ABC)= 5)之后的 5 个空格,第 1 行第 2 列之后的 4 个空格(8 - 长度(1437)= 4)等。

是否有 linux 工具可以为我做这件事,还是我应该自己编写?

Ed *_*ton 5

该POSIX实用PR称为pr -e -t不正是你想要什么,据我所知是存在于每个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
Run Code Online (Sandbox Code Playgroud)

并且选项卡显示为^Is:

$ 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$
Run Code Online (Sandbox Code Playgroud)