【问题标题】:How Can I fill an html array with my awk script?如何用我的 awk 脚本填充 html 数组?
【发布时间】:2019-12-01 13:17:24
【问题描述】:

对于我在 bash/html 中的 CGI,我尝试在 html 数组中显示来自许多 CSV 文件的一些信息。所以我使用这个脚本:

#!/bin/bash

echo "Content-type: text/html"
echo ""
echo '
<html>
        <head>
                <meta http-equiv="Content-Type" content="test/html"; charset=UTF-8">
                <title> CLF MONITORING </title>
                <h1> FRAME monitoring <font size=3> <a href="Index.sh">[ Index ]</a> </font> </h1>
                <hr size="4" color="blue">

        <style>
                         body{
                          background-color: #eff1f0;
                         }
        </style>

        </head>
<body>'

read a
test=$( echo $a | cut -d'=' -f2)

echo '<PRE>'

echo "FRAME : $test "
echo "------------------"

echo ""


echo "<table>"
echo "<tr>"
echo "<td>"
echo "<PRE>"
for fn in /var/www/cgi-bin/LPAR_MAP/*; do 
    awk -F',|;' 'NR==1 { split(FILENAME ,a,"[-.]");
       print "DATE ========================== : " a[4] }
       /'$test'/ { 
           print ""
           print "LPARS :" $2
           print "RAM : " $5
           print "CPU 1 : " $6
           print "CPU 2 : " $7
           print "" 
           print ""}' $fn; 
done
echo "</PRE>"
echo "</td>"
echo "</tr>"
echo "</table>"
echo '</PRE>'
echo '</body>
</html>'

输出是:

FRAME : MIAIBYC00 
------------------

DATE ========================== : 20180705

LPARS :HSCL9010 This operation is only allowed when the managed system is in the Standby or Operating state.
RAM : 
CPU 1 : 
CPU 2 : 


DATE ========================== : 20180122

LPARS :miaibv228
RAM : 8
CPU 1 : 2.0
CPU 2 : 4



LPARS :miaibv158
RAM : 5
CPU 1 : 0.1
CPU 2 : 1



LPARS :miaibv157
RAM : 6
CPU 1 : 0.2
CPU 2 : 1



LPARS :OSvalidation
RAM : 0.25
CPU 1 : 0.2
CPU 2 : 1



LPARS :miaibv104
RAM : 64
CPU 1 : 3.0
CPU 2 : 7

... 

DATE ========================== : 20180124

LPARS :miaibv228
RAM : 8
CPU 1 : 2.0
CPU 2 : 4



LPARS :miaibv158
RAM : 5
CPU 1 : 0.1
CPU 2 : 1



LPARS :miaibv157
RAM : 6
CPU 1 : 0.2
CPU 2 : 1



LPARS :OSvalidation
RAM : 0.25
CPU 1 : 0.2
CPU 2 : 1

但我想创建很多列,如下所示:

想法是:为一个“日期==========”创建一列,其信息如下,但列数。

例如:

Date ========= XXXXX    Date ============ XXXXX    Date ============== XXXXXXX

LPARS :miaibv228        LPARS : XXXXXX             LPARS : XXXXX
RAM : 8                 RAM : XXXXXX               RAM : XXXXXX
CPU 1 : 2.0             CPU 1 : XXXXX              CPU 1 : XXXXX
CPU 2 : 4               CPU 2 :  XXXXX             CPU 2 : XXXXXX

对于这个例子,我只有 3 个“日期”和一些信息。但实际上,我有更多的信息。

你有什么想法吗?

【问题讨论】:

  • 我希望你不介意我已经重新格式化了你的一些代码。如果你这样做了,你可以点击我名字上方的edited,然后回滚到之前的版本。
  • 我会找到一个本机创建多列 html 的工具。然后你必须弄清楚用你的输入创建一个类似的表的逻辑。但我认为这并不容易。您可能会走运并发现巧妙地使用带有分隔符选项的paste 命令可以帮助您,但我认为这需要在单独的文件中创建表格部分,然后粘合标题和结尾部分。其他读者很可能会有更好的想法! ;-) 。祝你好运。
  • 我的意思是您应该使用“本机创建多列 html”作为生成模板 html 文件的方法,您可以将其用作构建所需输出的指南。抱歉,如果不清楚。祝你好运。
  • 您好!改革 @shellter 没问题! ;) 你可以在这里找到我想要的示例:connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-131/…(法语,但 awk 脚本是可读的;))这个脚本完全符合我的要求(我不关心这个脚本中的颜色/css,我只想做同样的数组,但是一列对应一个“日期======”……我可以用bash中的while循环填充一个html列表框,但是……这看起来很难对于像我这样的初学者!^^

标签: html arrays bash cgi


【解决方案1】:

我认为您只需将 &lt;td&gt;&lt;pre&gt; 标记移动到循环内即可:

. . .
for fn in /var/www/cgi-bin/LPAR_MAP/*; do 
    echo "<td>"
    echo "<PRE>"
    awk -F',|;' 'NR==1 { split(FILENAME ,a,"[-.]");
       print "DATE ========================== : " a[4] }
       /'$test'/ { 
           print ""
           print "LPARS :" $2
           print "RAM : " $5
           print "CPU 1 : " $6
           print "CPU 2 : " $7
           print "" 
           print ""}' $fn; 
    echo "</PRE>"
    echo "</td>"
done
. . .

【讨论】:

  • 你好@丹尼斯威廉姆森!谢谢您的回答 !我的印象是您的脚本与我的脚本执行相同的操作...您可以在这里找到我想要的示例:connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-131/…(法语但 awk 脚本可读;))
  • 哼...对不起,我没关系!我只是忘记放 css 来查看我的数组的边框!你的解决方案效果很好!
猜你喜欢
  • 2013-04-02
  • 2017-10-12
  • 2019-04-09
  • 1970-01-01
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2017-06-21
相关资源
最近更新 更多