i want to print every Nth line of a file using AWK. i tried modifying the general format :-
awk \'0 == NR % 4\' results.txt
to:-
This do also work, but its not a good practice.
awk '!(NR%'$ct')' results.txt
This is ok to use:
awk '!(NR%n)' n="$ct" results.txt
You may want to use:
awk -v patt="$ct" 'NR % patt' results.txt
Given a file like the following:
$ cat -n a
1 hello1
2 hello2
3 hello3
4 hello4
5 hello5
...
37 hello37
38 hello38
39 hello39
40 hello40
These are equivalent:
$ awk 'NR % 7 == 0' a
hello7
hello14
hello21
hello28
hello35
$ ct=7
$ awk -v patt="$ct" 'NR % patt == 0' a
hello7
hello14
hello21
hello28
hello35
Or even
$ awk -v patt="$ct" '!(NR % patt)' a
Note that the syntax NR % n == 0
means: number of line is multiple to n
. If we say !(NR % patt)
, then this is true whenever NR % patt
is false, ie, NR
is multiple of patt
.
As you comment you are using Solaris, instead of default awk
use the following:
/usr/xpg4/bin/awk
How about this:
awk -v n="$ct" '0 == NR % n' results.txt
or a bit shorter
awk -v n="$ct" '!(NR % n)' results.txt