How to capture 2 consecutive rows when a condition is true ?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to capture 2 consecutive rows when a condition is true ?
# 22  
Old 11-05-2006
[0-9][0-9]* matches number of any length.
# 23  
Old 11-06-2006
Hi anbu, thanks alot!!!
# 24  
Old 11-07-2006
If you want to test for a 4-digit number in awk , you can use the syntax [0-9]{4}

Jean-Pierre.
# 25  
Old 11-28-2006
Hi All,

To extend further, I would need the awk script to perform the average calculation on all the rest of the counts except for the 1st count no matter whether 1st count belongs to Group1 or Group2. Can anybody help me to modify the below to work in the above manner?


awk '
$1 ~ "^[0-9][0-9]*$" && $NF == 0 { grp1=grp1+$(NF-1); tot1=tot1+1 }
$1 ~ "^[0-9][0-9]*c$" && $NF == 0 { grp2=grp2+$(NF-1); tot2=tot2+1 }
END {
if(tot1 != 0 ) printf("Group1\nAverage = %f \n",grp1/tot1)
if(tot2 != 0 ) printf("Group2c\nAverage = %f\n",grp2/tot2)
}' file

For example, the below calculation will ignore the number "2826". So for Group1, it will output "2830" instead of the average of "2828"
Input:

0001 x= 1 $---------------------------------..-.--.. 0
0001 tt= 137 171 423 1682 2826 0

0002 x= 1 $---------------------------------..-.--.. 0
0002 tt= 137 171 423 1682 2830 0

0003c x= 1 $----.----------------------------..-.--..-------- 0
0003c tt= 132 167 423 1670 2708 3842 0

0004c x= 1 $----.----------------------------..-.--..-------- 0
0004c tt= 134 169 424 1676 2714 3766 0

Desired output:

Group1
average = 2830

Group2(with "c" appended)
average = 3804
# 26  
Old 11-28-2006
try this
Code:
awk '
NR > 3 &&  $1 ~ "^[0-9][0-9]*$" && $2 ~ "tt="  { grp1=grp1+$(NF-1); tot1=tot1+1}
NR > 3 &&  $1 ~ "^[0-9][0-9]*c$" && $2 ~ "tt=" { grp2=grp2+$(NF-1); tot2=tot2+1}
END {
if(tot1 != 0 ) printf("Group1\nAverage = %f \n",grp1/tot1)
if(tot2 != 0 ) printf("Group2c\nAverage = %f\n",grp2/tot2)
}' file

# 27  
Old 11-28-2006
Thanks anbu ! It works just fine !!
# 28  
Old 09-26-2007
Quote:
Originally Posted by vish_indian
Try this:

Code:
awk '{if($0~"x= 1"){flag=1; print} else{ if(flag==1){ print $0"\n"}; flag=0}}' awtest

Hi,

If input were to be a mixture (with the number of rows of "x= 1" varying and having a max of 3 rows of "x= 1"), i would want to have the following expected output. Note that only "x= 1" will be grabbed. How can i amemd the code below to suit this criteria

Code:
awk '{if($0~"x=  1"){flag=1; print} else{ if(flag==1){ print $0"\n"}; flag=0}}'  input


Eg.

Input:

0001 dblz= 23 0 0 1 .
0001 ri_esd= 1824 1824 605 605 605 601.5 603 602
0001 x= 1 ----------------------------------..-.--..
0001 x= 1 ----------------------------------..-.--..
0001 tt= 137 171 423 1682 2826 0
0002c UUU= 3597 3345 2993 2683
0002c zzz= 24 0 0 1 .
0002c ri_esd= 577 577.5 577 573.5 576 574.5 576
0002c x= 1 -----.----------------------------..-.--..--------
0002c x= 1 -----.----------------------------..-.--..--------
0002c x= 1 -----.----------------------------..-.--..--------
0002c tt= 132 167 423 1670 2708 3842 0
0003 dblz= 25 0 0 1 .
0003 ri_esd= 566 566 566 562 564.5 563.5
0003 x= 28 ----------------------------------..-.--..--------
0003 tt= 130 165 421 1666 2795 0
0004c UUU= 7304 6726 5942 5248
0004c zzz= 26 0 0 1 .
0004c ri_esd= 564 564 564 560 562.5 561.5 563
0004c x= 1 -----.----------------------------..-.--..--------
0004c tt= 134 169 424 1676 2714 3766 0


Expected output:

0001 x= 1 ----------------------------------..-.--..
0001 x= 1 ----------------------------------..-.--..
0001 tt= 137 171 423 1682 2826 0

0002c x= 1 -----.----------------------------..-.--..--------
0002c x= 1 -----.----------------------------..-.--..--------
0002c x= 1 -----.----------------------------..-.--..--------
0002c tt= 132 167 423 1670 2708 3842 0

0004c x= 1 -----.----------------------------..-.--..--------
0004c tt= 134 169 424 1676 2714 3766 0
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to capture lines that meet either condition

I am trying to modify and understand an awk written by @Scrutinizer The below awk will filter a list of 30,000 lines in the tab-delimited file. What I am having trouble with is adding a condition to SVTYPE=CNV that will only print that line if CI=,0.95: portion in blue in file is <1.9. The... (2 Replies)
Discussion started by: cmccabe
2 Replies

2. Shell Programming and Scripting

Compute value from more than three consecutive rows

Hello all, I am working on a file like below: site Date time value1 value2 0023 2014-01-01 00:00 32.0 23.7 0023 2014-01-01 01:00 38.0 29.9 0023 2014-01-01 02:00 85.0 26.6 0023 2014-01-01 03:00 34.0 25.3 0023 2014-01-01 04:00 37.0 23.8 0023 2014-01-01 05:00 80.0 20.3 0023 2014-01-01 06:00... (16 Replies)
Discussion started by: kathy wang
16 Replies

3. Shell Programming and Scripting

Average across rows with a condition

Hi Friends, My input file Gene1 10 20 0 Gene2 5 0 15 Gene3 10 10 10 Gene4 5 0 0 If there is a zero for any gene in any column, I don't want that column to be considered which reduces the denominator value during average. Here is my output Gene1 10 20 0 10 Gene2 5 0 15 10 Gene3... (5 Replies)
Discussion started by: jacobs.smith
5 Replies

4. Shell Programming and Scripting

Columns to Rows - Transpose - Special Condition

Hi Friends, Hope all is well. I have an input file like this a gene1 10 b gene1 2 c gene2 20 c gene3 10 d gene4 5 e gene5 6 Steps to reach output. 1. Print unique values of column1 as column of the matrix, which will be a b c (5 Replies)
Discussion started by: jacobs.smith
5 Replies

5. Shell Programming and Scripting

Convert rows to columns based on condition

I have a file some thing like this: GN Name=YWHAB; RC TISSUE=Keratinocyte; RC TISSUE=Thymus; CC -!- FUNCTION: Adapter protein implicated in the regulation of a large CC spectrum of both general and specialized signaling pathways GN Name=YWHAE; RC TISSUE=Liver; RC ... (13 Replies)
Discussion started by: raj_k
13 Replies

6. Shell Programming and Scripting

Capture rows for a column in file from delete sql -Oracle

Hi, This may not be the right forum but i am hoping someone knows an answer to this. I have to capture rows for a column that was deleted. How can i do that without having to write a select query? delete from myschema.mytable where currentdatetimestamp > columnDate this should delete 5... (4 Replies)
Discussion started by: jakSun8
4 Replies

7. Shell Programming and Scripting

deleting rows under a certain condition

there are 20 variables and I would like to delete the rows if 13th-20th columns are all NA. Thank you! FID IID aspirpre statihos fibrahos ocholhos arbhos betabhos alphbhos cacbhos diurehos numbcig.x toast1 toast2 toast3 toast4 ischoth1 ischoth2 ischoth3 ischoth4 101 101 1 1 1 1 1 2 1 2... (2 Replies)
Discussion started by: johnkim0806
2 Replies

8. Shell Programming and Scripting

Print merged rows from two files by applying if condition

Hi all, I have list of two kind of files and I want to compare the rows and print the merged data by applying if condition. First kind of file looks like: and second kind of file looks like : I want to print the rows present in second file followed by 3 more columns from first... (6 Replies)
Discussion started by: CAch
6 Replies

9. Shell Programming and Scripting

remove consecutive duplicate rows

I have some data that looks like, 1 3300665.mol 3300665 5177008 102.093 2 3300665.mol 3300665 5177008 102.093 3 3294015.mol 3294015 5131552 102.114 4 3294015.mol 3294015 5131552 102.114 5 3293734.mol 3293734 5129625 104.152 6 3293734.mol ... (13 Replies)
Discussion started by: LMHmedchem
13 Replies

10. UNIX for Dummies Questions & Answers

how to capture no. of rows updated in update sql in unix db2

hi, i am a new user in unix..and we have unix db2. i want to capture the no. of rows updated by a update db2 sql statement and redirect into a log file. I've seen db2 -m...but not sure how the syntax should be. The update sql that I'm going to run is from a file... Can you please share... (1 Reply)
Discussion started by: j_rymbei
1 Replies
Login or Register to Ask a Question