AWK to print every nth line from a file

前端 未结 3 666
隐瞒了意图╮
隐瞒了意图╮ 2021-01-04 18:41

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



        
相关标签:
3条回答
  • 2021-01-04 18:48

    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
    
    0 讨论(0)
  • 2021-01-04 18:56

    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
    
    0 讨论(0)
  • 2021-01-04 19:06

    How about this:

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

    or a bit shorter

    awk -v n="$ct" '!(NR % n)' results.txt
    
    0 讨论(0)
提交回复
热议问题