在输出管道命令时添加一行

时间:2013-08-09 06:09:27

标签: bash shell ls

我有一个管道命令说

command1 | command2 | command3

或者说类似

ps | grep "something" 

现在输出命令我希望使用shell脚本将每个coloumn的一些标签或数据添加到顶部。

修改
简而言之,这就是我想要的

InsertedLabel1   Inslabel2        Inslabel3
Data1frompipe     Data1frompipe     Data1frompipe
Data2frompipe    Data2frompipe     Data2frompipe

实现这一目标的简单方法是什么?

2 个答案:

答案 0 :(得分:2)

如果您希望标题与列对齐,您可以使用恰当命名的column实用程序(BSD扩展,但它也附带大多数Linux发行版)。要将现有文本重新格式化为对齐列,请使用-t选项。

您可以使用复合语句插入列标题:

command1 | command2 | { echo Header1 Header2 Header3; command3 } | column -t

或:

{ echo Header1 Header2 Header3; command1 | command2 | command3 } | column -t

(无论你发现哪个更具可读性。)

请注意,标题中可能没有空格,数据元素也可能没有空格。如果您的数据不是以空格分隔的,则可以使用-s选项指定不同的分隔符;记得为标题使用相同的分隔符。

column左对齐所有列,因此数字列看起来不像您希望的那样好。

答案 1 :(得分:1)

您可以在shell中使用块来插入另一个命令,并使用它在另一个命令的输出之前或之后插入行,例如在grep之前回声:

ps | { echo "header"; grep "something"; }

为了让您在脚本中更轻松,您可以使用此表单:

ps | {
    echo "header"
    grep "something"
    # possibly other echos here.
}

在awk中你可以使用BEGIN:

ps | awk 'BEGIN { print "header"; } /something/;'

和/或END添加拖尾线:

ps | awk 'BEGIN { print "header"; } /something/; END { print "------"; }'

当然,如果你有两个以上的命令,你可以使用最后一个

上的表格
command | command | { echo "header"; grep "something"; }

或者

command | command | awk 'BEGIN { print "header"; } /something/;'