我有一个管道命令说
command1 | command2 | command3
或者说类似
ps | grep "something"
现在输出命令我希望使用shell脚本将每个coloumn的一些标签或数据添加到顶部。
修改
简而言之,这就是我想要的
InsertedLabel1 Inslabel2 Inslabel3
Data1frompipe Data1frompipe Data1frompipe
Data2frompipe Data2frompipe Data2frompipe
实现这一目标的简单方法是什么?
答案 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/;'