Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

print every nth line into a row using gawk

I have a very huge file in which I need to obtain every nth line and print it into a row.

My data:

1      937  4.320194 2      667  4.913314 3      934  1.783326 4      940  -0.299312 5      939  2.309559 6      936  3.229496 7      611  -1.41808 8      608  -1.154019 9      606  2.159683 10     549  0.767828 

I want my data to look like this:

1      937  4.320194 3      934  1.783326 5      939  2.309559 7      611  -1.41808 9      606  2.159683 

This is of course an example, I want every 10th line for my huge data file. I tried this so far:

 NF == 6 {      if(NR%10) {print;}      } 
like image 713
user1269741 Avatar asked Apr 01 '12 22:04

user1269741


People also ask

What is awk '{ print $3 }'?

txt. If you notice awk 'print $1' prints first word of each line. If you use $3, it will print 3rd word of each line.

How do you grep the nth line after a match?

To get the n-th line after each match, we can first use grep -An to find each block with n+1 lines. Next, instead of piping it to grep -v, we pipe it to a command that can print every (n+1)-th line.


2 Answers

To print every second line, starting with the first:

awk 'NR%2==1' file.txt 

To print every tenth line, starting with the tenth line:

awk 'NR%10==0' file.txt 

To use this in a script, add the following to a file called script.awk:

BEGIN {     print "Processing file" }  NR%10==0  END {     print "Finished processing" } 

Then execute:

awk -f script.awk file.txt 
like image 76
Steve Avatar answered Sep 18 '22 08:09

Steve


With sed, you can do a lot of variations on this quite easily with the first~step command. For instance:

# Odd lines sed -n 1~2p file # Every tenth line (10, 20, 30, ...) sed -n 10~10p file # Every tenth line (1, 11, 21, ...) sed -n 1~10p file # First plus every tenth (1, 10, 20, 30, ...) sed -n -e 1p -e 10~10p file 
like image 30
Kevin Avatar answered Sep 21 '22 08:09

Kevin