如何使用bash格式化下面的记录字段之间的空格

时间:2014-08-20 10:09:58

标签: bash unix awk sed grep

如何使用bash格式化下面记录之间的空格:

 123  sample  file  456
 894  sample  files 789

 123   sample    file       456
 894   sample    files      789

,其中

 123 <3spaces> sample <4spaces> file <7spaces> 456
 894 <3spaces> sample <4spaces> files <6spaces> 789

1 个答案:

答案 0 :(得分:4)

您可以使用带有printf的awk执行此操作。要左对齐列,可以在格式说明符中使用减号:

awk '{printf "%-6s%-10s%-11s%s\n", $1,$2,$3,$4}' file

负数指定每列的宽度,但填充位于右侧,而不是左侧。

输出:

123   sample    file       456
894   sample    files      789

实际上,您可以使用内置printfread的bash或多或少完全相同的方式执行此操作:

while read -ra cols; do printf "%-6s%-10s%-11s%s\n" "${cols[@]}"; done < file

-a切换到read表示将列读入数组。