Stuck with awk !!!


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Stuck with awk !!!
# 1  
Old 09-14-2013
Stuck with awk !!!

Can someone help me with geting the desired output?

Source:

Code:
Bank1.sss    
     63  Result code [0] 
      2  Result code [106] 
      4  Result code [108] 
 Bank2.sss
    474  Result code [0] 
      1  Result code [103] 
      4  Result code [106] 
      2  Result code [187] 
      1  Result code [580]

Output: (Should calculate the percentage of each bank's error)

Code:
Bank1.sss
91.30     63  Result code [0] 
2.89      2  Result code [106] 
5.79      4  Result code [108] 
 Bank2.sss
97.92    474  Result code [0] 
0.20      1  Result code [103] 
0.82      4  Result code [106] 
0.41      2  Result code [187] 
0.20      1  Result code [580]

I did the following:

Code:
for i in cat FI_list; do echo $i >> err_result; grep $i CCScrape130903.log | grep "Result code"| cut -d~ -f2 | sort | uniq -c | awk '{ s += $1 } END { print "sum is", s "\n"} {printf "%f", $1/s*100} {print $0}' >> err_result; done

It is generating output as :

Code:
Bank1.sss
100.000000     63  Result code [0] 
3.076923      2  Result code [106] 
5.797101      4  Result code [108] 
sum is 69

Bank1.sss
100.000000    474  Result code [0] 
0.210526      1  Result code [103] 
0.835073      4  Result code [106] 
0.415800      2  Result code [187] 
0.207469      1  Result code [580] 
sum is 482

Can someone help me with getting the desired output?

TIA
# 2  
Old 09-14-2013
Use printf "%.2f" to round to 2 decimal places (assuming that's your only problem, which I can see from the output).
# 3  
Old 09-14-2013
Quote:
Originally Posted by Scott
Use printf "%.2f" to round to 2 decimal places (assuming that's your only problem, which I can see from the output).
If you see the output carefully, you will see that the output shows 100.000000 for Result code [0] even though it should not be 100, it should be 91.30 for Bank1.sss.

The first column data is the success rate in percentage for any error for a particular bank.

Eg:
For Bank 1,

total entries : 63+2+4=69
63/69*100 = 91.30
2/69*100 = 2.89 ... and so on.
# 4  
Old 09-14-2013
Without any precision, it will never know how to round correctly.

Code:
$ echo "63/69*100" | bc
0
$ echo "scale=2; 63/69*100" | bc
91.00
$ echo "scale=3; 63/69*100" | bc
91.300

# 5  
Old 09-14-2013
You get higher precision with
Code:
$1*100/s

and even higher enforcing floating point
Code:
$1*100.0/s

# 6  
Old 09-14-2013
hmm, I am aware of that but since I am new to awk, its getting difficult for me to generate the required output.

I need to know what needs to be changed in the following command

Code:
 awk '{ s += $1 } END { print "sum is", s "\n"} {printf "%f", $1/s*100} {print $0}'

so that I can get the output as

Code:
Bank1.sss
91.30     63  Result code [0] 
2.89      2  Result code [106] 
5.79      4  Result code [108] 
 Bank2.sss
97.92    474  Result code [0] 
0.20      1  Result code [103] 
0.82      4  Result code [106] 
0.41      2  Result code [187] 
0.20      1  Result code [580]

The problem with the above awk command is :

At first, the value of s is 63. so it creates percentage as 63/63*100 = 100 %
then, the value of s is 63+2 i.e 65. so it creates percentage as 2/65*100 = 3.07 % and so on... I hope you got the point.


How can I change the command such that awk will create percentage only for the entries between ".sss" , calculate the sum and then percentage. Then move to the next loop i.e the entries between next set ".sss".

I am getting the proper sum for every set but not correct percentage.

Last edited by zsycho; 09-14-2013 at 02:36 PM..
# 7  
Old 09-14-2013
Code:
awk '
  NR == FNR { if( !$2 ) { B++; next }
              BANK[B]+= $1
              next
            }
  ! $2 { T = BANK[++C]; print $0 " (total " T ")"; next }
  {
    printf( "%.2f ", $1 / T * 100 )
  } 1
' file file

Code:
Bank1.sss (total 69)
91.30      63  Result code [0] 
2.90       2  Result code [106] 
5.80       4  Result code [108] 
Bank2.sss (total 482)
98.34     474  Result code [0] 
0.21       1  Result code [103] 
0.83       4  Result code [106] 
0.41       2  Result code [187] 
0.21       1  Result code [580]

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

stuck on assignment

I was given this to do, Write a Shell script to automatically check that a specified user is logged in to the computer. The program should allow the person running the script to specify the name of the user to be checked, the frequency in seconds at which the script should check. If a... (1 Reply)
Discussion started by: operator
1 Replies

2. Linux

Stuck in pthread_cond_signal()

I am developing a multi-threaded library that helps the transformation of messages between threads in different processes using shared memory. I am using the pthreads condition facility in order to synchronize access to the shared memory slots through which the messages are passed. My test... (2 Replies)
Discussion started by: dhzdh
2 Replies

3. Shell Programming and Scripting

awk getting stuck after BEGIN

I am beginner in awk awk 'BEGIN{for(i=1;(getline<"opnoise")>0;i++) arr=$1}{print arr}' In the above script, opnoise is a file, I am reading it into an array and then printing the value corresponding to index 20. Well this is not my real objective, but I have posted this example to describe... (1 Reply)
Discussion started by: akshaykr2
1 Replies

4. Shell Programming and Scripting

I am stuck in my script

Hi All I have script that find 777 dir with specific extension like .php .Now after finding all 777 directory i will place in httpd.conf using a directory directive ,Now i was not do that,if directory entry exitst in httpd.conf then script ignor it dont show me at stdout else if it dont find... (2 Replies)
Discussion started by: aliahsan81
2 Replies

5. Shell Programming and Scripting

help! im stuck..

I want to search for the line with the group name and add the user into the group. The file format is the same as /etc/group The code i wrote is egrep "^$newGID" $group >/dev/null FS=":" oldData=awk -F: '{print $3}' newData= "$oldData,$newUser" sed -n $4/$newData $group but a friend... (1 Reply)
Discussion started by: cherrywinter
1 Replies

6. AIX

really stuck- need to get a variable within a variable- AWK

Hi all, I have been struggling with this all day, and it is key to a conversion database I have to write. The data converts the information out of an array using AWK, and basically all I have to do is figure out how to get the value of a variable inside a variable. Right now at its... (11 Replies)
Discussion started by: jeffpas
11 Replies

7. Programming

I'm stuck :(

Suppose that I have some data: 12,30 12,45 2,3 7,8 3,9 30, 8 45,54 56,65 Where (a,b) indicates that a is connected to b. I want to get all connected nodes to one point. For instance, the output of the above example should be something like: Group 1 2,3 3,9 Group 2 12,30 12,45... (4 Replies)
Discussion started by: Legend986
4 Replies

8. UNIX for Dummies Questions & Answers

stuck and confused

#!/bin/bash echo $1 | cat - $2 >> /tmp/$$ && mv /tmp/$$ $2 im trying to get the first argument to go in the middle of the second argument which is a file, anyone any ideas. i have only managed to get it to go on the end or the front. been fiddling about with wc -l, i get the number of lines... (5 Replies)
Discussion started by: iago
5 Replies

9. Shell Programming and Scripting

Got stuck so plz help

I'm having problem writing a shell script using bash that takes a file as an argument. The script should be able to determine what permissions the owner, group and everybody has for the file passed in. could anyone plz help me out. (3 Replies)
Discussion started by: boris
3 Replies

10. UNIX for Advanced & Expert Users

stuck....!

I have been busy reading away on devices and filesystems and I am stuck on a particular subject matter.. I'm not understanding the concept behind mknod mkfifo makedev or related commands.. can anyone shed some light on the subject.! any feedback welcome! moxxx68 (0 Replies)
Discussion started by: moxxx68
0 Replies
Login or Register to Ask a Question