我有一个脚本,假设是这样(显然,我真正的脚本要复杂得多):
echo A
echo a
echo B
echo b
echo C
echo c
echo D
echo d
有没有一种简单的方法可以让线条并排?
A a
B b
C c
D d
或者如果我将其分成两个文件然后合并它们会更好吗?我该怎么办呢?
我有一个脚本,假设是这样(显然,我真正的脚本要复杂得多):
echo A
echo a
echo B
echo b
echo C
echo c
echo D
echo d
有没有一种简单的方法可以让线条并排?
A a
B b
C c
D d
或者如果我将其分成两个文件然后合并它们会更好吗?我该怎么办呢?
一个便携式工具是
paste
:从规格来看:
不同长度的行可能会生成不完全对齐的输出。要查看示例,请运行:
您可以通过管道来修复此问题
column
:笔记:
$'\t'
在某些 shell 中生成制表符,您可以使用"$(printf '\t')"
.column
但它本身并不便携。column
在打印任何输出之前需要知道其整个输入,因此它不是一个处理您需要立即查看的内容的好工具;而且它是处理可能永远不会结束的数据(例如来自潜在无限循环的数据)的错误工具。您可以使用
fmt
以下格式来格式化输出:一种方法是避免打印换行符,只打印每行的最后一个字段。(特别是如果您的行具有不同数量的字段。)
有些平台可以在
echo
命令中执行此操作(例如,通过添加选项标志或字符串中的特殊序列),但我认为最简单的可移植方法是使用命令printf
。例如:当然,您可以使用制表符或其他分隔符来代替 4 个空格。
在更复杂的情况下(例如,如果文本可能包含诸如 之类的字符
%
),那么您需要使用显式格式字符串,例如printf "%s " "A"
。如果需要的话,这还允许您对齐可变长度字段。例如:
给出输出:
(您可以通过删除
-
;来使用右对齐,printf
还有许多其他格式选项。)让我们假设您的 echo 命令序列只是一个生成文本行的示例,这些文本行在现实生活中来自应用程序等;因此,仅仅
echo -n
每隔一段时间说一次或替换echo
为printf
是行不通的。然后是这个简单的解决方案,其功能
produce_output()
可以作为您的输出生成程序的替代:当然你可以使用
printf
命令代替来echo
进行更多的输出格式控制。