AWK从文件中打印每第n行

Shr*_*har 8 awk

我想使用AWK打印文件的每个第N行.我尝试修改一般格式: -

awk '0 == NR % 4' results.txt

至:-

awk '0 == NR % $ct' results.txt
Run Code Online (Sandbox Code Playgroud)

其中'ct'是应跳过的行数.它不起作用.有人可以帮帮我吗?提前致谢.

fed*_*qui 10

您可能想要使用:

awk -v patt="$ct" 'NR % patt' results.txt
Run Code Online (Sandbox Code Playgroud)

说明

给定如下文件:

$ cat -n a
     1  hello1
     2  hello2
     3  hello3
     4  hello4
     5  hello5
     ...
    37  hello37
    38  hello38
    39  hello39
    40  hello40
Run Code Online (Sandbox Code Playgroud)

这些是等价的:

$ 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
Run Code Online (Sandbox Code Playgroud)

甚至

$ awk -v patt="$ct" '!(NR % patt)' a
Run Code Online (Sandbox Code Playgroud)

注意,语法NR % n == 0意味着:行数是多个n.如果我们说!(NR % patt),那么无论什么时候NR % patt都是假的,也就是NR多数patt.

更新

当您评论您使用Solaris时,而不是默认awk使用以下内容:

/usr/xpg4/bin/awk
Run Code Online (Sandbox Code Playgroud)