用于操作输出的 perl 脚本(从命令行生成)

用于操作输出的 perl 脚本(从命令行生成)

当前情况-我运行这一行:

Xxx命令| mail -s '测试'[电子邮件受保护]

然后我将在我的电子邮件中得到如下输出

名称 文件(n) 空间计算
Adam 12345 12345 空间/文件(n)
Becky 45689 8987
Maryanne 5598 7895

我有一些计算要做,所以需要一些额外的列
很乱。所以我希望它们根据我的 Perl 脚本中的列进行对齐。另外添加额外的列,以便根据其他列的值进行计算。

我的最终目标:通过在 Linux 中运行我的 Perl 脚本,这将从命令中“获取”我的输出,然后很好地格式化它。 (每次数据都会不同,所以我只想做一次,而不是每次手动获取数据输出后都进行编辑,例如将数据复制并粘贴到perl中并逐一格式化)

如果一切顺利,当我在 Linux 中运行我的 Perl 脚本时。 (格式化命令的输出),我将收到一封电子邮件,其中包含格式良好的输出。
(**很抱歉,但我不知道如何格式化此处的样式以使其与列标题对齐)

名称 文件(n) 空间计算
Adam 12345 12345 空间/文件(n)
Becky 45689 8987
Maryanne 5598 7895

所以我的主要问题是:如何编写可以操作输出的 perl 脚本?我应该先将输出放入Linux 中的文本文件中吗?

因为我不知道如何编写可以在作为邮件发送之前格式化输出或向输出添加列的 perl 脚本。

提供任何建议将不胜感激。谢谢。

答案1

你能试试这个 awk 命令吗?

$ xxxcommand | awk 'NR==1{printf("%-10s%-10s%-10s%-10s\n",$1,$2,$3,"calculation")}NR>1{printf("%-10s%-10s%-10s%-10s\n",$1,$2,$3,$2/$3)}' | mail_command
Name      Files(n)  Space     calculation
Adam      12345     12345     1
Becky     45689     8987      5.0839
Maryanne  5598      7895      0.709056

答案2

Xxxcommand在您的和命令之间mail -s...执行以下操作:

Xxxcommand |
sed -e '
   1i\
.TS\
tab( );\
c c c c\
l n n n.
   $a\
.TE
' | tbl - |  nroff -Tascii -ms | grep \. |
mail -s 'test on' [email protected]

注意:c指的是居中列、l左对齐列和n数字对齐列。修改它们的数字以适合您所需的列数。

相关内容