12

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

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

到:-

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

其中 'ct' 是应该跳过的行数。它不工作。谁能帮帮我?提前致谢。

4

3 回答 3

14

您可能想使用:

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是假的,即NR是 的倍数,这就是真的patt

更新

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

/usr/xpg4/bin/awk
于 2013-08-21T08:18:10.197 回答
4

这个怎么样:

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

或者更短一点

awk -v n="$ct" '!(NR % n)' results.txt
于 2013-08-21T08:17:51.660 回答
1

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

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

这是可以使用的:

awk '!(NR%n)' n="$ct" results.txt
于 2013-08-21T10:18:06.637 回答