AWK打印文件中的每N行

AWK打印文件中的每N行,awk,Awk,我想使用AWK打印文件的每N行。 我尝试修改常规格式:- awk'0==NR%4'results.txt 致:- 其中“ct”是应跳过的行数。 它不起作用。谁能帮帮我吗? 提前谢谢。这个怎么样: awk -v n="$ct" '0 == NR % n' results.txt 或者再短一点 awk -v n="$ct" '!(NR % n)' results.txt 您可能需要使用: awk -v patt="$ct" 'NR % patt' results.txt 解释 给定如下所示的文

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

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

致:-

其中“ct”是应跳过的行数。 它不起作用。谁能帮帮我吗? 提前谢谢。

这个怎么样:

awk -v n="$ct" '0 == NR % n' results.txt
或者再短一点

awk -v n="$ct" '!(NR % n)' results.txt
您可能需要使用:

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
/usr/xpg4/bin/awk
这些是等效的:

$ 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
为false时,即
NR
patt
的倍数时,这是真的

更新 在您评论时,您使用的是Solaris,而不是默认的
awk
,请使用以下命令:

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

这也行,但不是一个好的做法

awk '!(NR%'$ct')' results.txt
这是可以使用的:

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

了解单引号在shell中的作用。简而言之:没有变量扩展。请阅读comp.unix.shell常见问题解答中的问题24:。切勿使用第一个版本,因为根据shell变量的值,您可能会收到奇怪的输出和/或神秘的错误消息。第二个版本还可以,但是之前已经有几个人建议过了。谢谢你这么快的回复。。但是当我使用它的时候,我得到了以下错误:
awk:1行附近的语法错误awk:1行附近的解救
谢谢:)我们可以用nawk做同样的事情吗?因为我使用普通的awk,所以我无法执行它。正如我前面提到的,我遇到了一个保释错误。请帮助我。谢谢你这么快的回复。。但是当我使用它时,我得到了以下错误:
awk:1行附近的语法错误awk:1行附近的解救
awk-v pattern=“$ctr”'NR%pattern==0'res.txt
它对我有效。您是否事先将
ctr
设置为整数值?请使用
/usr/xpg4/bin/awk
而不是正常的
awk
。是的,我做了。。我这样做了
ctr=
cat data | grep-I“Record Closed”| wc-l``在这里,我用它来计算“Record Closed”模式在名为“data”的文件中的出现情况,感谢您的快速响应。。但是当我使用它时,我得到了以下错误:
awk:1行附近的语法错误awk:1行附近的解救
有什么问题?