如何在 Unix shell 脚本中用空格填充字符串?

如何在 Unix shell 脚本中用空格填充字符串?

我有如下数据:

01234567
09876544
12345676
34576980

我需要用 11 个空格填充它,即我的输出应该是这样的:

'           01234567' 
'           09876544'
'           12345676'
'           34576980'

如何使用 UNIX shell 脚本来完成此操作?

答案1

我假设/猜测撇号不应该包含在输出中。

标准 shell 解决方案,其中infile包含输入的文件:

while read i; do printf "%19s\n" "$i"; done < infile

其中19,是给定的每行字符串长度 (8) 加上所需的填充 (11)。我再次猜测这种填充正是您想要的,而不仅仅是在所有行前面添加 11 个空格。如果不是这种情况,您需要给出一个具体示例,说明应如何处理不同长度的输入行。

如果要包含撇号:

while read i; do printf "'%19s'\n" "$i"; done < infile

答案2

GNU coreutils 的一个更短的选项是以下pr命令:

pr -T -o 11 foo.txt

手册页摘录:

DESCRIPTION
       Paginate or columnate FILE(s) for printing.

       -o, --indent=MARGIN
              offset each line with MARGIN (zero) spaces

       -T, --omit-pagination
              omit page headers and trailers, eliminate any pagination by form feeds set in input files

答案3

您可以使用 Ex-editor (Vi),通过就地更改文件:

ex -s +"%s@^@    @" -cwq foo.txt

或者通过解析标准输入并将其打印到标准输出:

cat foo.txt | ex -s +"%s@^@    @" +%p -cq! /dev/stdin

答案4

这是对@Daniel Andersson 的答案的补充,如果从文件读取的每行的长度有所不同,您可以执行以下操作:

while read i; do printf "%11s%s\n" "" "$i"; done < infile

相关内容