我有如下数据:
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