我想使用AWK打印文件的每个第N行。 我尝试修改一般格式: -
awk '0 == NR % 4' results.txt
于: -
awk '0 == NR % $ct' results.txt
其中'ct'是应跳过的行数。 它不起作用。有人可以帮帮我吗? 提前谢谢。
答案 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
为假时都是如此,即NR
是patt
的倍数。
当您发表评论时,您使用的是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