AWK to print every nth line from a file

三世轮回 提交于 2020-07-02 18:04:11

问题


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:-

awk '0 == NR % $ct' results.txt

where 'ct' is the number of lines that should be skipped. its not working . can anyone please help me out? Thanks in advance.


回答1:


You may want to use:

awk -v patt="$ct" 'NR % patt' results.txt

Explanation

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.

Update

As you comment you are using Solaris, instead of default awk use the following:

/usr/xpg4/bin/awk



回答2:


How about this:

awk -v n="$ct" '0 == NR % n' results.txt

or a bit shorter

awk -v n="$ct" '!(NR % n)' results.txt



回答3:


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


来源:https://stackoverflow.com/questions/18352181/awk-to-print-every-nth-line-from-a-file

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!