Visit Our UNIX and Linux User Community


Improving code


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Improving code
# 1  
Old 02-06-2017
Improving code

Gents,

I did the below code to get an output (report) ,.. the code works fine but I believe it can be more shorted using better method.

Please if you can help, to generate same output improving the code , will be great.

here my code.

Code:
# get diff in time
awk '{$9=$8-prev8;prev8=$8;print $9/1000000}' tmp1 OFS="\t" |
awk 'NR>1{print}' | awk '{a=int($1); print a}' OFS="\t"   > tmp2

# get distance 
awk '{$9=$6-prev6;prev6=$6;print}' tmp1 OFS="\t" | awk '{$10=$7-prev7;prev7=$7;print}' OFS="\t" | 
awk '{a=(sqrt(($9)^2+($10)^2)); print a/1000}' | awk 'NR>1{print}' | awk '{a=int($1); print a }' OFS="\t"  > tmp3

paste tmp3 tmp2 > tmp4

# filter by conditions
vpff=`awk  '$2>=18 { ++count } END{ print count +1 }' tmp4`
vpds4a=`awk  '$1>=2 && $1<=5 && $2<18 { ++count } END{ print count }' tmp4`
vpds4b=`awk  '$1>5 && $1<=11 && $2<18 { ++count } END{ print count }' tmp4`
vpds4=$(($vpds4a+vpds4b))
vpdsss=`awk  '$1>11 && $2<18 { ++count } END{ print count }' tmp4`

printf "      INFO1:     $vpff \n" > tmp5
printf "      INFO2:     $vpds4\n" >> tmp5
printf "      INFO3:     $vpdsss \n" >> tmp5

# average for each lien
awk 'FNR==NR{sum+=$2;next}; {printf ("%s %4d %4.1f\n", $1,$2,($2/sum)*100)}' tmp5{,} > tmp6 

# report
awk 'BEGIN{
printf ("\t-------------------------------------------\n")
print ("\tCode \t           Total-VPs \t  Total-PCT")
printf ("\t-------------------------------------------\n")
}
{
sum2 += $2;
printf ("\t%-15s\t%9d\t%8.1f\n",$1,$2,$3)
}
END {
printf ("\t-------------------------------------------\n")
printf ("\tTotal:\t%17d\n",sum2)
printf ("\t-------------------------------------------\n")
}' tmp6

attached input file..

Thanks and regards..

Last edited by jiam912; 02-06-2017 at 11:21 AM..
# 2  
Old 02-06-2017
You already have 317 posts in this forum and I bet you got lots of hints to your questions in the past. What would be the most obvious "bad habit" in this script?
These 6 Users Gave Thanks to zaxxon For This Post:
# 3  
Old 02-06-2017
I was about to ask the same as zaxxon did, as I'm surprised that none of the help given in the past seems to have fallen on fertile ground. Until a decent answer is posted, I'll withhold the "one single awk" proposal I came up with.
These 4 Users Gave Thanks to RudiC For This Post:
# 4  
Old 02-06-2017
Gents,

Thanks for your comments. I have learn lot from your advices.. I post my code to find more alternatives, with the expert people.

Appreciate your help.

---------- Post updated at 09:17 AM ---------- Previous update was at 09:17 AM ----------

What would be the most obvious "bad habit" in this scrip

I believe instead to create many output files, this can be do in variables ..


Moderator's Comments:
Mod Comment Removed repetitive entries.

Last edited by zaxxon; 02-06-2017 at 12:10 PM..
# 5  
Old 02-06-2017
This User Gave Thanks to RudiC For This Post:
# 6  
Old 02-06-2017
I'll cut to the chase and be a bit more generous -- you are reprocessing your input files over, and over, and over, and over, and over, and over, and over, when you could have done so just once or twice.

Your code is too big a mess to replace wholesale, especially since we know nothing about your input, but 'filter by conditions' is particularly egregious. You are allowed to put more than one statement in an awk program! You could have done 5 times as much work at once. Here is pseudocode.

Code:
read vpff vpds4a vpds4b vpds4 vpdsss <<EOF
$( awk '
        awk-range1 { count1++ }
        awk-range2 { count2++ }
        awk-range3 { count3++ }
        awk-range4 { count4++ }
        awk-range5 { count5++ }
        END { print count1+0, count2+0, count3+0, count4+0, count5+0; }' tmp4 )
EOF

The idea is to have awk print a line like "5 7 3 9 12" which gets dumped into read and split among its variables.
This User Gave Thanks to Corona688 For This Post:
# 7  
Old 02-06-2017
Thanks for the advices.

Yes it is clear that my code is a big a mess , but to be honest that is what i can do till. now.. we learn daily.. hope in the future improve more.

Regards

Previous Thread | Next Thread
Test Your Knowledge in Computers #596
Difficulty: Hard
For loops in C use the familiar syntax of placing the initialization, continuation condition, and interpretation on the same line as the keyword for.
True or False?

6 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Need help improving my script.

Thank you for taking the time to look at this and provide input. To start, I am not a linux/unix expert but I muddle through the best I can. I am also in no way shape or form a programmer. Please keep that in mind as you read this script. This script is designed to find all files in a given... (8 Replies)
Discussion started by: garlandxj11
8 Replies

2. Shell Programming and Scripting

Basic help improving for in loop

I'm obviously very new to this. I'm trying to write a simple for loop that will read the directory names in /Users and then copy a file into the same subdir in each user directory. I have this, and it works but it isn't great. #!/bin/bash HOMEDIRS=/Users/* for dirs in $HOMEDIRS; do if ];... (5 Replies)
Discussion started by: Heath_T
5 Replies

3. Shell Programming and Scripting

Improving code by using associative arrays

I have the following code, and I am changing it to #!/bin/bash hasArgumentCModInfile=0 hasArgumentSrcsInfile=0 hasArgumentRcvsInfile=0 OLDIFS="$IFS" IFS="|=" # IFS controls splitting. Split on "|" and "=", not whitespace. set -- $* # Set the positional... (3 Replies)
Discussion started by: kristinu
3 Replies

4. Shell Programming and Scripting

Improving this validate function

Hi guys, I use this function which was provided to me by someone at this site. It works perfectly for validating a users input option against allowed options.. example: validateInput "1" "1 3 4 5" would return 0 (success) function validateInput { input=$1 allowedInput=$2 for... (4 Replies)
Discussion started by: pyscho
4 Replies

5. UNIX for Dummies Questions & Answers

Improving Unix Skills

Kindly any advice to improve my unix skills as electronic books i can download or valuable sites as this one etc... (3 Replies)
Discussion started by: sak900354
3 Replies

6. Shell Programming and Scripting

improving my script

Hi; I want to access our customer database to retreive all clients that have as language index 2 or 3 and take their client number. My input is a file containing all client numbers. i access the data base using a function call "scpshow". The total number of clients i want to scan is 400 000... (6 Replies)
Discussion started by: bcheaib
6 Replies

Featured Tech Videos