Unix 在每N行之后向文本文件添加一行

Unix 在每N行之后向文本文件添加一行,unix,awk,Unix,Awk,您好,我有一个Unix命令,它生成ip地址列表以及其他信息列。我想向命令中添加一些内容,以便它将其显示为一组3行,然后是空格或-,然后是接下来的3行,依此类推 我怎样才能做到这一点 例如: 1.2.3.4 xy 1.3.5.7 ab 1.25.7.9 cd ------------- 1.25.7.8 kl 1.3.4.5 mn 1.25.7.8 op ------------- 1.24.5.6 la 1.3.4.5 ka 1.25.7.8 xz

您好,我有一个Unix命令,它生成ip地址列表以及其他信息列。我想向命令中添加一些内容,以便它将其显示为一组3行,然后是空格或-,然后是接下来的3行,依此类推

我怎样才能做到这一点

例如:

1.2.3.4    xy
1.3.5.7    ab
1.25.7.9   cd
-------------
1.25.7.8   kl
1.3.4.5    mn
1.25.7.8   op
-------------
1.24.5.6   la
1.3.4.5    ka
1.25.7.8   xz

您可以使用
awk
每隔40行打印一行:

awk '{ print $0; if(++i % 40 == 0) printf("-------------\n") }' file

%40
更改为
%3
,以便在每3行之后打印该额外行。

这是您想要的输出吗?输入是什么样子的?为什么是40模?这不是mod 4吗?或者更简单地说:
awk'1;NR%3==0{print“-----}”文件
@williampersell很抱歉给您添麻烦,但您能否建议使用
'1的文档在awk中?“我找不到任何关于这个奇怪的awk语法的东西,这些天让我觉得好笑。”埃德蒙顿感谢埃德的建议。我最近买了这本书,很有用。我只是找不到这个
1
东西,但我还没有仔细阅读整本书。@codeforester思考一下您的变量
I
和内置变量
NR
之间的值差异。如果没有区别,那么
i
有什么意义?还有,为什么要使用
printf“--\n”
而不是更简单、更健壮的wrt-ORS设置
print“--”
printf
是一个内置的函数而不是函数,所以
printf(“foo”)
对AFAK无害,但它不会像您认为的那样,因为paren正在分组表达式,而不是函数参数定界符)。最后-这不会产生发布的预期输出,因为它会在末尾添加一行
--
$ seq 9 | awk 'NR>1 && (NR%3)==1{print "---"} 1'
1
2
3
---
4
5
6
---
7
8
9