AWK从文件中打印每第n行

时间:2013-08-21 08:15:12

标签: awk

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

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

于: -

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

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

3 个答案:

答案 0 :(得分:10)

您可能想要使用:

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

解释

给出如下文件:

$ cat -n a
     1  hello1
     2  hello2
     3  hello3
     4  hello4
     5  hello5
     ...
    37  hello37
    38  hello38
    39  hello39
    40  hello40

这些是等价的:

$ 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

甚至

$ awk -v patt="$ct" '!(NR % patt)' a

请注意,语法NR % n == 0表示:行数是n的倍数。如果我们说!(NR % patt),那么每当NR % patt为假时都是如此,即NRpatt的倍数。

更新

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

/usr/xpg4/bin/awk

答案 1 :(得分:4)

这个怎么样:

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

或稍短一点

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

答案 2 :(得分:1)

这也有效,但这不是一个好习惯。

awk '!(NR%'$ct')' results.txt

可以使用:

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