一.n,N
next(n)输出模式空间的内容(如果运行sed时有-n则不会输出),然后读取新的输入内容。
Next(N)通过读取新的输入行,并将它添加到模式空间的现有内容之后来创建多行模式空间。模式空间最初的内容和新输入行之间用换行符分隔。在模式空间中嵌入的换行符可以利用转义序列‘\n’来匹配。在多行模式空间中,元字符‘^’匹配空间中的第一个字条,而不匹配换行符后面的字符。同样,’$‘只匹配模式空间中最后的换行符,而不匹配任何嵌入的换行符。
控制流:n/N后继续执行n/N后的动作,而不是直接回到最开始处执行
二.d,D
d删除模式空间的内容并导致新读入的输入行,从而在脚本的顶端重新执行命令。
D删除模式空间中直到第一个嵌入的换行符的这部分。他不会导致读入新的输入行,他从脚本的顶端重新匹配模式空间剩余的内容。
控制流:回到脚本顶端
三.p,P
在执行完脚本的最后一个命令后,模式空间的内容自动输出(-n选项或#n抑制这个默认的动作)。因此,当默认的输出被抑制或脚本的控制流更改,一直不能到达脚本的底部时,需要使用打印命令(P或p)。注意P或p不改变模式空间的内容。
p:打印模式空间的内容
P:输出多行模式空间的第一部分,直到第一个嵌入的换行符为止。
注意:
对于最后一行执行N/n命令,不会执行脚本中N/n后面的命令,这样的话当总行数是奇数的时候,最后一行不会执行N后面的命令,但如果没有用-n来禁止打印模式空间的内容,任然会打印最后一行的内容。可以使用$!N命令,这个命令的意思是除了最后一行其他的行均执行N。
awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量:
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
以空格为分段符:
awk 'BEGIN {RS=" ";}{print $0}' link.txt
awk实现 文本内的换行符 为分隔符,输出变为逗号:(参考 https://blog.csdn.net/weixin_30817749/article/details/99331674)
awk 'BEGIN{ORS=","}{print $0}' ldap_member.log