Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AWK print column from a specific row if conditions are met

Tags:

bash

awk

gawk

I want to use 'awk' to extract specific information from a formatted file such that:

  1. If the row has 2 fields, the first column (100) is printed and the second column (2) represents "X" pairs of lines that follow
  2. If the row corresponding to NR + (2*X -1) starts with a "B" the second column of that row is printed
  3. If the corresponding row to NR + (2*X -1) does not start with a "B" the value "0" is printed.

Example File:

100 2
A .5 .4
.3 .2 .1    
B .9 .8
.7 .6 .65
200 1
A .5 .4
.3 .2 .1

Ideal Output:

100 .9
200 0

Code Thus Far:

awk '{if(NF==2) print $1;}'

Which produces:

100  
200 
like image 228
platypus106 Avatar asked Feb 01 '26 01:02

platypus106


1 Answers

Input

$ cat f
100 2
A .5 .4
.3 .2 .1    
B .9 .8
.7 .6 .65
200 1
A .5 .4
.3 .2 .1

Output

$ awk 'NF==2{t=$1; l=(NR+2*$2-1)}NR==l{print t,/^B/?$2:0}' f
100 .9
200 0

Explanation

awk 'NF==2{                    # If row has 2 fields
             t=$1              # lets save 1st field and print later 
             l=(NR+2*$2-1)     # line to be checked
     }
     NR==l{            # if current record number is equal to l

             # Print t, if starts with B then field 2 to be printed else 0 
             print t,/^B/?$2:0
     }
     ' f
like image 120
Akshay Hegde Avatar answered Feb 03 '26 17:02

Akshay Hegde



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!