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;} }
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.
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.
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
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With