【问题标题】:Convert shell Script result into HTML table将 shell 脚本结果转换为 HTML 表格
【发布时间】:2020-07-03 15:09:21
【问题描述】:

请帮助我通过电子邮件将 shell 脚本的结果转换为 HTML 表格。 我编写了一个 shell 脚本,它将以以下格式提供输出。

Directory Name: /a/b/c
Business Date: 20200323
Expected_files_1:2
Expected_files_2:14
Actual_files_1: File count changes each day
Actual_files_2: File count changes each day
Comments of Actual_files_1
Comments of Actual_files_2
Other Comments

我想用shell脚本把上面的结果转换成HTML表格。

预期的 HTML 表格:

该表应始终包含两行,一是标题,另一行是脚本中的变量值。 第一行是 HTML 表格的标题,它将始终保持不变。 第二个表的值每天都在变化。

因为我是 HTML/Shell 脚本的初学者,所以我不知道编写一个脚本,它会给我上述 HTML 格式的结果。

任何帮助将不胜感激

【问题讨论】:

  • 您对这项任务有什么具体问题?读取输入数据?将数据包装成 HTML 标签?替换 HTML 中具有特殊含义的字符?请edit你的问题来回答这个问题。我还建议显示一些表格行的示例输入以及匹配输入的预期输出。您的图像显示了一个带有标题和一个空行的表格。我想这不是你想要的。
  • 我想要一个 shell 脚本来根据所附图像将结果转换为 HTML 表格格式并通过邮件发送该表格。
  • 请将所有信息添加到问题中。您的文件是否始终包含预期 HTML 表中的一行的数据?如果是,请在问题中说明这一点。如果该表预计包含多于一行数据,请显示至少 2 行的示例。请添加有关特定问题的问题,正如我在之前的评论中已经建议的那样。 (有人已经投票结束您的问题。如果您不提出更具体的问题,这可能很快就会发生。)
  • 感谢您的回复。你能给我命令把上面的结果转换成HTML表格格式吗?
  • @Rohith Shanbhag :他们的任何标题名称是否可用于Comments of Actual_files_1,就像Directory Name 一样,如果这种情况编辑您的输入

标签: html shell unix scripting


【解决方案1】:

假设您的输出存储在 /tmp/output.txt 试试这个:

./yourscript.sh > /tmp/output.txt
awk -F ':' 'BEGIN { print "<html>\n<body>\n<table>\n\t<tr>" } { print "\t\t<th>"$1"</th>" } END { print "\t</tr>" }' /tmp/output.txt
awk -F ':' 'BEGIN { print "\t<tr>" } { print "\t\t<td>"$2"</td>" } END { print "\t</tr>\n</table>\n</body>\n</html>" }' /tmp/output.txt

返回

<html>
<body>
<table>
        <tr>
                <th>Directory Name</th>
                <th>Business Date</th>
                <th>Expected_files_1</th>
                <th>Expected_files_2</th>
                <th>Actual_files_1</th>
                <th>Actual_files_2</th>
                <th>Comments of Actual_files_1</th>
                <th>Comments of Actual_files_2</th>
                <th>Comments Other</th>
        </tr>
        <tr>
                <td> /a/b/c</td>
                <td> 20200323</td>
                <td>2</td>
                <td>14</td>
                <td> File count changes each day</td>
                <td> File count changes each day</td>
                <td></td>
                <td></td>
                <td></td>
        </tr>
</table>
</body>
</html>

如果您确保脚本输出的每一行都具有相同的key: value 格式,您自己会更轻松。如果您与我们分享您的脚本,我们可能会进一步帮助您。

【讨论】:

  • 感谢您的帮助。我现在已经添加了我的脚本,所以请你帮我通过邮件以 HTML 表格格式获取上述脚本的结果。
  • 谁能帮我从上面的脚本中得到 HTML 表格格式的结果?
  • @RohithShanbhag 你能上传一个虚拟输入文件来输入你的脚本吗?我发现很难在真空中解码你想要做什么;)
【解决方案2】:

这是一个两步过程:

  1. 将列转置为行,以冒号作为输入/输出分隔符:
awk -f tst.awk inputfile.txt > result.txt

tst.awk 包含以下代码:

BEGIN { FS=OFS=":" }
{
    for (rowNr=1;rowNr<=NF;rowNr++) {
        cell[rowNr,NR] = $rowNr
    }
    maxRows = (NF > maxRows ? NF : maxRows)
    maxCols = NR
}
END {
    for (rowNr=1;rowNr<=maxRows;rowNr++) {
        for (colNr=1;colNr<=maxCols;colNr++) {
            printf "%s%s", cell[rowNr,colNr], (colNr < maxCols ? OFS : ORS)
        }
    }
}
  1. 用于将点 1 的输出转换为 html 表格格式:有一个简单的脚本可用于执行此操作:https://sourceforge.net/projects/command-output-to-html-table/,可用于将任何命令输出或文件转换为漂亮的 html 表格格式。您可以为此脚本指定分隔符,包括制表符、换行符等特殊分隔符,并以 html 表格格式获取输出,并在顶部进行 html 搜索。只需下载脚本,解压缩并发出以下命令:
cat result.txt | { cat ; echo ; } | ./tabulate.sh -d ":" -t "My Report" -h "My Report" > output.html

这里:作为分隔符。

我在这里附上了一个示例 output.html:https://sourceforge.net/projects/my-project-files/files/output.html/download

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多