Как отобразить вывод моего скрипта в столбце с bash / awk? - PullRequest
0 голосов
/ 09 июля 2019

Я разрабатываю CGI в bash / html.

С помощью этого CGI я могу отображать некоторую информацию из CSV-файлов.

Одной из этих данных является потребление в RAM и CPU разных FRAME.

Чтобы отобразить эту информацию, я создаю эту страницу:

#!/bin/bash


echo "Content-type: text/html"
echo ""

echo '

        
                
 CLF MONITORING 
                 FRAME monitoring  [ Index ]  
                

        
                         body{
                          background-color: #eff1f0;
                         }
        

        
'

echo ""
echo ""

echo ""
echo ""
echo "`./FRAME_SCRIPT.sh cccc.csv bbbb.csv`"
echo ""
echo ""
echo "
"echo""echo '' ''

Мой скрипт "FRAME_SCRIPT.sh" отображает информацию о FRAME из разных файлов CSV. Здесь скрипт

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

Идея состоит в том, когда каждый раз, когда появляется шаблон «Файл: XXXXX», этот шаблон с его собственной информацией отображаетсяв новом столбце рядом с предыдущими шаблонами «Файл: XXXX».

Я думаю, что если мы используем «Файл:», как шаблон ключа, это возможно. Я не могу использовать имя файлапотому что это никогда не то же самое. Может быть, это можно сделать, но я не знаю, как ...

В моем примере я бегумой скрипт в каталоге только с 2 CSV-файлами, но на самом деле у меня гораздо больше CSV-файлов.Так что в этом случае я использую только 2 csv, чтобы быть более наглядным.

У вас есть идея сделать это?

1 Ответ

0 голосов
/ 09 июля 2019

Не используйте циклы оболочки для манипулирования текстом (см. «Почему используется цикл оболочки для обработки текста, который считается плохой практикой» ).

На вашем месте я отформатировал бы вывод в виде таблицы 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...