Sponsored Content
Top Forums Shell Programming and Scripting Filter on one column and then perform conditional calculations on another column with a Linux script Post 302939508 by Don Cragun on Thursday 26th of March 2015 04:37:06 AM
Old 03-26-2015
A few comments on your code:
  1. There is no do ... while loop in awk.
  2. I have no idea what you are trying to accomplish with the statement 3 tempMax=$2.
  3. You can't have an array and a scalar variable with the same name: retransmissions[$1]=retransmissions.
  4. If you have multiple statements to be processed in a loop, in an if, or in an else, you need to use braces ({ and }) to group those statements.
  5. The expression ($3 in c) is meaningless when you haven't created any elements in an array named c[].
  6. You don't calculate an average of n items by subtracting the lowest value from the highest value.
  7. Using sort -u deletes duplicate entries. Deleting duplicate entries makes it impossible to calculate an average of all values for any given IP address, or for an IP address and sequence # pair.
  8. A for(i in c) loop produces output in random (not necessarily sorted) order.
You didn't show what output you hope to produce from your sample input.

You talked about reporting the number of bytes transmitted, but there is nothing in your code that seems to try to capture or print that data. (And, the following script doesn't either.)

You seem to be trying to print the average time as a decimal number and the number of retransmissions as a floating point value printed with one decimal place. (Neither of these make any sense to me.)

So, making lots of wild guesses (ignoring the output your script seemed to be trying to produce), the following might help as a starting point for a script that will do what you want:
Code:
#!/bin/ksh
sort -k1,1 -k3,3n stats.txt | awk '
BEGIN {	printf("%17s %7s %s %s\n",
		"destIP", "seqNO", "AverageTime", "retransmissions")
	printf("----------------- ------- ----------- ---------------\n")
}
$1 != lIP || $3 != lSeqNo {
	if(NR != 1)
		printf("%17s %7d %11.3f %15d\n",
			lIP, lSeqNo, tTime / cnt, cnt - 1)
	if($1 == "destIP")
		exit
	lIP = $1
	tTime = $2
	lSeqNo = $3
	cnt = 1
	if(debug) printf("input: %s\nlIP=%s, lSeqNo=%d, tTime=%f, cnt=%d\n",
		$0, lIP, lSeqNo, tTime, cnt)
	next
}
{	tTime += $2
	cnt++
	if(debug)printf("input: %s\nlIP=%s, lSeqNo=%d, tTime=%f, cnt=%d\n",
		$0, lIP, lSeqNo, tTime, cnt)
}'

which, with the sample input you provided, produces the output:
Code:
           destIP   seqNO AverageTime retransmissions
----------------- ------- ----------- ---------------
          1.2.3.4     123       0.310               2
          1.2.3.4     124       0.620               1
          1.2.3.5      44       0.030               0
          1.2.3.5      45       0.830               0
          1.3.2.5      44       0.080               0

This User Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to perform calculations using numbers greater than 2150000000.

Could someone tell me how to perform calculations using numbers greater than 2150000000 in Korn Shell? When I tried to do it it gave me the wrong answer. e.g. I have a ksh file with the contents below: --------------------------------- #!/bin/ksh SUM=`expr 2150000000 + 2` PRODUCT=`expr... (3 Replies)
Discussion started by: stevefox
3 Replies

2. Shell Programming and Scripting

Sed or awk script to remove text / or perform calculations from large CSV files

I have a large CSV files (e.g. 2 million records) and am hoping to do one of two things. I have been trying to use awk and sed but am a newbie and can't figure out how to get it to work. Any help you could offer would be greatly appreciated - I'm stuck trying to remove the colon and wildcards in... (6 Replies)
Discussion started by: metronomadic
6 Replies

3. Shell Programming and Scripting

Conditional aggregation and print of a column in file

Hi My input file looks like field1 field2 field3 field4 field5 field1 field2 field3 field4 field5 field1 field2 field3 field4 field5 :::::::::::: :::::::::::: There may be one space of multiple spaces between fields and no fields contains spaces in them. If field 1 to 4 are equal for... (3 Replies)
Discussion started by: bittoo
3 Replies

4. Shell Programming and Scripting

Replace a column with a value conditional on a value in col1

Hi, Perhaps a rather simple problem...? I have data that looks like this. BPC0013 ANNUL_49610 0 0 1 1 BPC0014 ANNUL_49642 0 0 2 1 BPC0015 ANNUL_49580 0 0 1 1 BPC0016 ANNUL_49596 0 0 2 1 BPC0017 VULGO_49612 0 0 1 1 BPC0018 ANNUL_49628 0 0 1 1 BPC0019 ANNUL_49692 0 0 2 1 170291_HMG... (4 Replies)
Discussion started by: genehunter
4 Replies

5. Shell Programming and Scripting

Enter third column & Perform Operation

I am trying to enter a third column in this file, but the third column should that I call "Math" perform a some math calculations based on the value found in column #2. Here is the input file: Here is the desired output: Output GERk0203078$ Levir Math Cotete_1... (5 Replies)
Discussion started by: Ernst
5 Replies

6. Shell Programming and Scripting

awk , conditional involving line and column

Dear All, I indeed your help for managing resarch data file. for example I have, data1.txt : type of atoms z vz Si 34 54 O 20 56 H 14 13 Si 40 17 O ... (11 Replies)
Discussion started by: ariesto
11 Replies

7. UNIX for Dummies Questions & Answers

Command line / script option to filter a data set by values of one column

Hi all! I have a data set in this tab separated format : Label, Value1, Value2 An instance is "data.txt" : 0 1 1 -1 2 3 0 2 2 I would like to parse this data set and generate two files, one that has only data with the label 0 and the other with label -1, so my outputs should be, for... (1 Reply)
Discussion started by: gnat01
1 Replies

8. Shell Programming and Scripting

awk script concatenate two column and perform mutiplication

Need your help in solving this puzzle. Any kind of help will be appreciated and link for any documents to read and learn and to deal with such scenarios would be helpful Concatenate column1 and column2 of file 1. Then check for the concatenated value in Column1 of File2. If found extract the... (14 Replies)
Discussion started by: as7951
14 Replies

9. Shell Programming and Scripting

awk script to append suffix to column when column has duplicated values

Please help me to get required output for both scenario 1 and scenario 2 and need separate code for both scenario 1 and scenario 2 Scenario 1 i need to do below changes only when column1 is CR and column3 has duplicates rows/values. This inputfile can contain 100 of this duplicated rows of... (1 Reply)
Discussion started by: as7951
1 Replies

10. Shell Programming and Scripting

Conditional Column Value

Hi Folks, I'm trying tog ain further experience with shell programming and have set my a small goal of writing a little filesystem monitoring script. So far my output is as follows: PACMYDB03 Filesystem Size Used Avail Use% Status /usr/local/mysql/data ... (5 Replies)
Discussion started by: Axleuk
5 Replies
All times are GMT -4. The time now is 11:52 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy