在shell脚本中分配相等的空格,以便在一行中的多个输出语句之间不会发生重叠

时间:2016-01-11 19:00:07

标签: linux shell sh

所以我有一个通用的日志记录功能,用于记录目的。所有其他函数都使用此通用函数,其中需要进行日志记录,并将语句以及所需的参数传递给记录器文件。

Eg 1: This is what I am getting as output in the log file
Mon Jan 11 18:32:30 UTC 2016 "Function X " "Check File X"    "More info needed"
Mon Jan 11 18:32:30 UTC 2016 "Function Y & A"   "Check File Y&A"   "More info needed"
Mon Jan 11 18:32:30 UTC 2016 "Function Z and A"   "Check File Z"  "More info needed"

Eg 2: What I need
Mon Jan 11 18:32:30 UTC 2016  "Function X "        "Check File X"         "More info needed"
Mon Jan 11 18:32:30 UTC 2016  "Function Y & A"     "Check File Y & A"     "More info needed"
Mon Jan 11 18:32:30 UTC 2016  "Function Z and A"   "Check File Z and A"   "More info needed"

我需要Function(),CheckFile&更多信息需要相同的空间,但不会相互重叠的空间。需要基本打算。我尝试在它们之间使用\ t(Tab空格),但它也没有帮助。一个更大的语句使下一行启动衬里,如示例1所示。我在我的泛型函数中使用echo语句来重定向日期,函数名称,文件名和&一行语句全部在日志文件中。

1 个答案:

答案 0 :(得分:0)

您应该使用标签来分隔输出中的列。

为什么?

  1. 很难事先知道色谱柱的最大宽度。这可能是不可能的,具体取决于每列数据的来源。
  2. 默认情况下,标签很灵活。
  3. 可以在查看之前处理输出。
  4. 如果您使用制表符分隔值,则可以通过expand对其进行过滤,以在查看文件时强制使用特定的制表符宽度。您甚至可以在LibreOffice Calc中打开它,并且由于其以制表符分隔的值支持而使列落入到位。

    如果您愿意,可以编写一个脚本,将制表符分隔的列转换为漂亮打印的表格以供查看。在python中这很简单:读取所有行,压缩它们以获得列的元组,获得每列的最大宽度,然后打印所有行,每列填充到该宽度。

    使用制表符而不是空格的最大好处是,您可以随时处理制表符分隔的文件,并将其转换为带空格的格式,如果您以后改变主意,但要朝相反方向前进则要困难得多

相关问题