How to put a difference calculation in my awk script ?


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to put a difference calculation in my awk script ?
# 1  
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  
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  
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  
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  
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 for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #542
Difficulty: Medium
A globally scoped variable is invalid throughout the entire program.
True or False?

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

Featured Tech Videos