How to put a difference calculation in my awk script ?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to put a difference calculation in my awk script ?
# 1  
Old 07-22-2019
How to put a difference calculation in my awk script ?

Hello,

For my CGI, I have this script :
Code:
#!/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 ""

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 '</body>
</html>'

This script allow to display informations from CSV like this :

Code:
FRAME : MIAIBYF00
---------------------------------


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

LPARS : miaibv189
RAM : 4
CPU 1 : 0.1
CPU 2 : 0.1

LPARS : miaibp05
RAM : 61
CPU 1 : 1.1
CPU 2 : 3


LPARS : miaibp05
RAM : 61
CPU 1 : 1.1
CPU 2 : 3


DATE ========================== : 20180123

LPARS : miaibv189
RAM : 7
CPU 1 : 0.5
CPU 2 : 0.5

LPARS : miaibp05
RAM : 59
CPU 1 : 1.0 
CPU 2 : 3 


LPARS : miaibp05
RAM : 61
CPU 1 : 1.1
CPU 2 : 3

I would like to display the consumption diffenence between theses to date next to the good informations. Something like :

FRAME : MIAIBYF00
---------------------------------


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

LPARS : miaibv189
RAM : 4
CPU 1 : 0.1

CPU 2 : 0.1

LPARS : miaibp05
RAM : 61
CPU 1 : 1.1
CPU 2 : 3


LPARS : miaibp05
RAM : 61
CPU 1 : 1.1
CPU 2 : 3


DATE ========================== : 20180123

LPARS : miaibv189
RAM : 7 ( + 3 )
CPU 1 : 0.5 ( + 0.4 )
CPU 2 : 0.5 ( + 0.4 )

LPARS : miaibp05
RAM : 59 ( - 2 )
CPU 1 : 1.0 ( - 0.1 )
CPU 2 : 3 


LPARS : miaibp05
RAM : 61
CPU 1 : 1.1
CPU 2 : 3

But I don't know how to do this... Can you help me ?


Thank yor ! Smilie
# 2  
Old 07-22-2019
Code:
...done | awk -F: '
/^DATE / {date_line++}
/^LPARS/ {lpars=$NF}
date_line==1 && $1 ~/(^RAM|^CPU)/ {var[lpars,$1]=$NF}
date_line>1 && length(var[lpars,$1]) && ($NF - var[lpars,$1] != 0) {
   if ($NF - var[lpars,$1] > 0) {
     $0=$0 "(+" $NF - var[lpars,$1] ")";
   } else {
     $0=$0 "(" $NF - var[lpars,$1] ")";
   }
}
1
'

echo '</PRE>'
.
.
.

# 3  
Old 07-22-2019
Another solution using 1 awk

Code:
.
.
.
echo "FRAME: $test"
echo "FRAME : $test "
echo "------------------"

echo ""

awk -F',|;' -v mtch=$test '
function diff(fld,ret) {
  if (p[FNR,fld] && $fld != p[FNR,fld])
     ret= sprintf(" ( %+0.2f)", $fld - p[FNR, fld])
  p[FNR, fld] = $fld
  return $fld ret
}
FNR==1 {
  split(FILENAME ,a,"[-.]")
  print "DATE ========================== : " a[4]
}
$0 ~ mtch {
  print ""
  print "LPARS :" $2
  print "RAM : "   diff(5)
  print "CPU 1 : " diff(6)
  print "CPU 2 : " diff(7)
  print ""
  print ""
}' /var/www/cgi-bin/LPAR_MAP/*

echo '</PRE>'
.
.
.

# 4  
Old 08-08-2019
Hello,

A late response, sorry... Smilie

Finally I do something different and make choice to create a other script for the difference calculation :


Code:
#!/bin/bash

cat /var/www/cgi-bin/test_calcul.csv | grep foo | awk -F'[,]' 'FNR==0{next}
               FNR>1{
                    print m " â†' " $1;
                    print "FRAME : " $2
                    printf "RAM : %+d%s",$4-RAM,ORS
                    printf "CPU 1 : %+d%s",$5-CPU1,ORS
                    printf "CPU 2 : %+d%s\n",$6-CPU2,ORS
                    }
               {m=$1;FRAME=$2}
               {m=$1;RAM=$4}
               {m=$1;CPU1=$5}
               {m=$1;CPU2=$6}
              '

And that works !

Thanks for your help ! Smilie
# 5  
Old 08-08-2019
Allow me some nit-picking:
- FNR never will assume the value 0 (nor does NR).
- as you have only one input file (stdin), FNR will always be identical with NR.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to put the command to remove duplicate lines in my awk script?

I create a CGI in bash/html. My awk script looks like : echo "<table>" for fn in /var/www/cgi-bin/LPAR_MAP/*; do echo "<td>" echo "<PRE>" awk -F',|;' -v test="$test" ' NR==1 { split(FILENAME ,a,""); } $0 ~ test { if(!header++){ ... (12 Replies)
Discussion started by: Tim2424
12 Replies

2. Shell Programming and Scripting

awk to calculate difference of split and sum the difference

In the awk I am trying to subtract the difference $3-$2 of each matching $4 before the first _ (underscore) and print that value in $13. I think the awk will do that, but added comments. What I am not sure off is how to add a line or lines that will add sum each matching $13 value and put it in... (2 Replies)
Discussion started by: cmccabe
2 Replies

3. Shell Programming and Scripting

awk script to find time difference between HTTP PUT and HTTP DELETE requests in access.log

Hi, I'm trying to write a script to determine the time gap between HTTP PUT and HTTP DELETE requests in the HTTP Servers access log. Normally client will do HTTP PUT to push content e.g. file_1.txt and 21 seconds later it will do HTTP DELETE, but sometimes the time varies causing some issues... (3 Replies)
Discussion started by: Juha
3 Replies

4. UNIX for Dummies Questions & Answers

Shell script - getting Time difference using awk

Hi..I have the data in a file like in this format, and I need the output time difference in seconds by using awk command. Start date/time and end date/time given in column 2,3 & 4,5. Please assist how to write shell script. File1.txt JOB1 10/09/2013 17:42:16 10/09/2013 17:43:46 SU 6202685/1... (4 Replies)
Discussion started by: mprithvi
4 Replies

5. Shell Programming and Scripting

awk script - redirecting out put based on mapping

Need awk solution. Please advise. inputfile.txt 1,NY, 1111 2,MI, 222 3,NY,333 4,OH,444 5,OH,555 mapping.txt NY NYNY IL ILLINOIS OH OHIO Need to write a code which will compare 2nd column of inputfile.txt with mapping file and redirect output based on the... (2 Replies)
Discussion started by: vegasluxor
2 Replies

6. Shell Programming and Scripting

Compare two CSV files and put the difference in third file with line no,field no and diff value.

I am having two csv files i need to compare these files and the output file should have the information of the differences at the field level. For Example, File 1: A,B,C,D,E,F 1,2,3,4,5,6 File 2: A,C,B,D,E,F 1,2,4,5,5,6 out put file: (12 Replies)
Discussion started by: karingulanagara
12 Replies

7. Shell Programming and Scripting

AWK Script and Commandline difference

Hey there, I just stumbled upon a difference between using awk on the commandline and using it in a shellscript. I have a variable, e.g.: PROG=vim then i want to check if the package with this name is installed: TEMPVAL=$(dpkg -l | awk '{ if ($2 == "$PROG") print $2 }') (Im using... (10 Replies)
Discussion started by: MrSnail
10 Replies

8. Shell Programming and Scripting

calculation using awk or shell script in between the numbers

file A E969K D223L E400L E34L file B predicted 3 1 250 251 500 501 1000 The output should be E969K 501 1000 D223L 1 250 E400L 251 500 E34L 1 250 I tried in this way (1 Reply)
Discussion started by: cdfd123
1 Replies

9. Shell Programming and Scripting

Put the difference of two files in out file

Hello, I have two files file1 & file2 containing both lines (1 word per line). I need to extract the lines that are in file1 and not present in file2 and have the result in output file. i.e : user>cat file1 line1 line2 line3 line4 line5 user>cat file2 line1 line3 line5 The... (2 Replies)
Discussion started by: newpromo
2 Replies

10. Shell Programming and Scripting

Time difference calculation

Hi Team, I am currently in the process of writing a script which will take a filename in the format SKADEV.0.db2.NODE0000.CATN0000.20080714231015.001 where the sixth string(with "." as the seperator) is the time stamp of the time of creation of the file. now here is my issue . I need to be... (2 Replies)
Discussion started by: Segwar
2 Replies
Login or Register to Ask a Question