如何在bash / awk列中显示脚本的输出?

时间:2019-07-09 18:12:56

标签: linux bash csv awk

我在bash / html中开发了CGI。

使用此CGI,我可以显示csv文件中的一些信息。

这些信息之一是不同FRAME在RAM和CPU中的消耗。

要显示这些信息,请创建此页面:

#!/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>'

echo "<table>"
echo "<tr>"

echo "<td>"
echo "<PRE>"
echo "`./FRAME_SCRIPT.sh cccc.csv bbbb.csv`"
echo "</td>"
echo "</tr>"
echo "</PRE>"
echo "</table>"
echo '</body>'
'</html>'

我的脚本“ FRAME_SCRIPT.sh”显示来自不同csv文件的有关FRAME的信息。这里的脚本

#!/bin/bash

OLDIFS=$IFS
IFS=','

for arg
do
echo -e "File : $arg "
echo "======================================================="
echo ""
while read FRAME RAM CPU1 CPU2
do
if [[ $FRAME != $PREV ]]
then
PREV=$FRAME
echo "FRAME : $FRAME"
echo -e "-----------------\n"
fi
echo -e "RAM : \t$RAM\n\
CPU 1 :\t$CPU1\n\
CPU 2 :\t$CPU2\n"
echo ""
done < "$arg"
done 

我使用命令运行它:

./My_script.sh *.csv

输出为:

enter image description here

File : cccc.csv 
=======================================================

FRAME : MIAIBB00
-----------------

RAM :   
CPU 1 : 
CPU 2 : 


FRAME : MIAIBTST1
-----------------

RAM :   
CPU 1 : 
CPU 2 : 


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

RAM :   8
CPU 1 : 2.0
CPU 2 : 4


RAM :   5
CPU 1 : 0.1
CPU 2 : 1


RAM :   6
CPU 1 : 0.2
CPU 2 : 1


RAM :   0.25
CPU 1 : 0.2
CPU 2 : 1


RAM :   64
CPU 1 : 3.0
CPU 2 : 7


RAM :   80
CPU 1 : 20.0
CPU 2 : 20


RAM :   8
CPU 1 : 1.0
CPU 2 : 2


RAM :   4
CPU 1 : 1.0
CPU 2 : 2


RAM :   4
CPU 1 : 1.0
CPU 2 : 2


RAM :   0
CPU 1 : null
CPU 2 : 0


File : bbbb.csv 
=======================================================


FRAME : MO1PPC02
-----------------

RAM :   12
CPU 1 : 0.3
CPU 2 : 2


RAM :   8
CPU 1 : 0.2
CPU 2 : 2


RAM :   15
CPU 1 : 0.8
CPU 2 : 2


RAM :   8
CPU 1 : 0.5
CPU 2 : 1


RAM :   36
CPU 1 : 2.0
CPU 2 : 4


RAM :   48
CPU 1 : 8.0
CPU 2 : 12


RAM :   8
CPU 1 : 0.2
CPU 2 : 2


RAM :   8
CPU 1 : 0.2
CPU 2 : 2


RAM :   31
CPU 1 : 2.0
CPU 2 : 8

但是在我的网页上,我想显示如下信息:

enter image description here

想法是,每当出现“ File:XXXXX”模式时,带有自己的信息的该模式就会在以前的“ File:XXXX”模式旁边的新列中显示。

我认为,如果像键模式一样使用“ File:”,那是可能的。我无法使用文件名,因为它从来都不是同一文件名。也许可以这样做,但我不知道如何...

举例来说,我在只有2个csv文件的目录中运行脚本,但实际上,我有更多的csv文件。因此,在这种情况下,我仅使用2个csv来更加清楚。

您有任何想法吗?

1 个答案:

答案 0 :(得分:0)

请勿使用shell循环操作文本(请参见why-is-using-a-shell-loop-to-process-text-considered-bad-practice)。

如果我是我,则将输出格式化为HTML表格,而不是预先格式化的文本,但是只需按照以下步骤操作,即可查看获取所需输出的一种方法:

$ cat ../tst.awk
BEGIN {
    FS = ","
    OFS = " : "
    split("FRAME,RAM,CPU 1,CPU 2", titles)
}

FNR == 1 {
    close(out)
    out = "out" ++cnt ".txt"
    print "File", FILENAME ORS "===================="   > out
}

$1 != prev {
    print "" ORS fmt(1) "\n--------------------\n"      > out
    prev = $1
}

{
    for (i=2; i<=NF; i++) {
        print fmt(i)                                    > out
    }
    print ""                                            > out
}

function fmt(fldNr) { return sprintf("%-8s%s", titles[fldNr] OFS, $fldNr) }

$ ls
bbbb.csv  cccc.csv

$ tail -n +1 *.csv
==> bbbb.csv <==
MO1PPC02,12,0.3,2
MO1PPC02,8,0.2,2
MO1PPC02,15,0.8,2
MO1PPC02,8,0.5,1
MO1PPC02,36,2.0,4
MO1PPC02,48,8.0,12
MO1PPC02,8,0.2,2
MO1PPC02,8,0.2,2
MO1PPC02,31,2.0,8

==> cccc.csv <==
MIAIBB00,,,
MIAIBTST1,,,
MIAIBYC00,8,2.0,4
MIAIBYC00,5,0.1,1
MIAIBYC00,6,0.2,1
MIAIBYC00,0.25,0.2,1
MIAIBYC00,64,3.0,7
MIAIBYC00,80,20.0,20
MIAIBYC00,8,1.0,2
MIAIBYC00,4,1.0,2
MIAIBYC00,4,1.0,2
MIAIBYC00,0,null,0

$ awk -f ../tst.awk cccc.csv bbbb.csv

$ ls
bbbb.csv  cccc.csv  out1.txt  out2.txt

$ tail -n +1 *.txt
==> out1.txt <==
File : cccc.csv
====================

FRAME : MIAIBB00
--------------------

RAM :
CPU 1 :
CPU 2 :


FRAME : MIAIBTST1
--------------------

RAM :
CPU 1 :
CPU 2 :


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

RAM :   8
CPU 1 : 2.0
CPU 2 : 4

RAM :   5
CPU 1 : 0.1
CPU 2 : 1

RAM :   6
CPU 1 : 0.2
CPU 2 : 1

RAM :   0.25
CPU 1 : 0.2
CPU 2 : 1

RAM :   64
CPU 1 : 3.0
CPU 2 : 7

RAM :   80
CPU 1 : 20.0
CPU 2 : 20

RAM :   8
CPU 1 : 1.0
CPU 2 : 2

RAM :   4
CPU 1 : 1.0
CPU 2 : 2

RAM :   4
CPU 1 : 1.0
CPU 2 : 2

RAM :   0
CPU 1 : null
CPU 2 : 0


==> out2.txt <==
File : bbbb.csv
====================

FRAME : MO1PPC02
--------------------

RAM :   12
CPU 1 : 0.3
CPU 2 : 2

RAM :   8
CPU 1 : 0.2
CPU 2 : 2

RAM :   15
CPU 1 : 0.8
CPU 2 : 2

RAM :   8
CPU 1 : 0.5
CPU 2 : 1

RAM :   36
CPU 1 : 2.0
CPU 2 : 4

RAM :   48
CPU 1 : 8.0
CPU 2 : 12

RAM :   8
CPU 1 : 0.2
CPU 2 : 2

RAM :   8
CPU 1 : 0.2
CPU 2 : 2

RAM :   31
CPU 1 : 2.0
CPU 2 : 8

$ paste *.txt
File : cccc.csv File : bbbb.csv
====================    ====================

FRAME : MIAIBB00        FRAME : MO1PPC02
--------------------    --------------------

RAM :           RAM :   12
CPU 1 :         CPU 1 : 0.3
CPU 2 :         CPU 2 : 2

        RAM :   8
FRAME : MIAIBTST1       CPU 1 : 0.2
--------------------    CPU 2 : 2

RAM :           RAM :   15
CPU 1 :         CPU 1 : 0.8
CPU 2 :         CPU 2 : 2

        RAM :   8
FRAME : MIAIBYC00       CPU 1 : 0.5
--------------------    CPU 2 : 1

RAM :   8       RAM :   36
CPU 1 : 2.0     CPU 1 : 2.0
CPU 2 : 4       CPU 2 : 4

RAM :   5       RAM :   48
CPU 1 : 0.1     CPU 1 : 8.0
CPU 2 : 1       CPU 2 : 12

RAM :   6       RAM :   8
CPU 1 : 0.2     CPU 1 : 0.2
CPU 2 : 1       CPU 2 : 2

RAM :   0.25    RAM :   8
CPU 1 : 0.2     CPU 1 : 0.2
CPU 2 : 1       CPU 2 : 2

RAM :   64      RAM :   31
CPU 1 : 3.0     CPU 1 : 2.0
CPU 2 : 7       CPU 2 : 8

RAM :   80
CPU 1 : 20.0
CPU 2 : 20

RAM :   8
CPU 1 : 1.0
CPU 2 : 2

RAM :   4
CPU 1 : 1.0
CPU 2 : 2

RAM :   4
CPU 1 : 1.0
CPU 2 : 2

RAM :   0
CPU 1 : null
CPU 2 : 0

$ paste *.txt | column -L -s$'\t' -t
File : cccc.csv       File : bbbb.csv
====================  ====================

FRAME : MIAIBB00      FRAME : MO1PPC02
--------------------  --------------------

RAM :                 RAM :   12
CPU 1 :               CPU 1 : 0.3
CPU 2 :               CPU 2 : 2

                      RAM :   8
FRAME : MIAIBTST1     CPU 1 : 0.2
--------------------  CPU 2 : 2

RAM :                 RAM :   15
CPU 1 :               CPU 1 : 0.8
CPU 2 :               CPU 2 : 2

                      RAM :   8
FRAME : MIAIBYC00     CPU 1 : 0.5
--------------------  CPU 2 : 1

RAM :   8             RAM :   36
CPU 1 : 2.0           CPU 1 : 2.0
CPU 2 : 4             CPU 2 : 4

RAM :   5             RAM :   48
CPU 1 : 0.1           CPU 1 : 8.0
CPU 2 : 1             CPU 2 : 12

RAM :   6             RAM :   8
CPU 1 : 0.2           CPU 1 : 0.2
CPU 2 : 1             CPU 2 : 2

RAM :   0.25          RAM :   8
CPU 1 : 0.2           CPU 1 : 0.2
CPU 2 : 1             CPU 2 : 2

RAM :   64            RAM :   31
CPU 1 : 3.0           CPU 1 : 2.0
CPU 2 : 7             CPU 2 : 8

RAM :   80
CPU 1 : 20.0
CPU 2 : 20

RAM :   8
CPU 1 : 1.0
CPU 2 : 2

RAM :   4
CPU 1 : 1.0
CPU 2 : 2

RAM :   4
CPU 1 : 1.0
CPU 2 : 2

RAM :   0
CPU 1 : null
CPU 2 : 0