Unix 在每N行之后向文本文件添加一行
您好,我有一个Unix命令,它生成ip地址列表以及其他信息列。我想向命令中添加一些内容,以便它将其显示为一组3行,然后是空格或-,然后是接下来的3行,依此类推 我怎样才能做到这一点 例如: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
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