如何使用awk打印以特定字符串开头的多线段

如何使用awk打印以特定字符串开头的多线段,awk,Awk,我正在使用ldapsearch命令,如下所示,其中我的输出字符串以特定字符串开头,以“dn”开头,其中我只需要有另一行与此相关联的行,表示我不希望任何以“dn”开头的行的单行输出后面包含空格 bash-4.1$ ldapsearch -h kts77 -LLL -xxx -b "ou=networks,ou=corp,ou=services,o=swift.com" '(&(cn=*noida*))' dn krvNetworkServiceKVP dn: ipnetworknumb

我正在使用ldapsearch命令,如下所示,其中我的输出字符串以特定字符串开头,以“dn”开头,其中我只需要有另一行与此相关联的行,表示我不希望任何以“dn”开头的行的单行输出后面包含空格

bash-4.1$ ldapsearch -h kts77 -LLL -xxx -b "ou=networks,ou=corp,ou=services,o=swift.com" '(&(cn=*noida*))' dn krvNetworkServiceKVP 

dn: ipnetworknumber=192.168.1, ou=networks,ou=corp,ou=services,o=swift.com

dn: ipnetworknumber=192.168.2, ou=networks,ou=corp,ou=services,o=swift.
 com

dn: ipnetworknumber=172.23.48, ou=networks,ou=corp,ou=services,o=swift.com
krvNetworkServiceKVP: auto_master_lnx=auto_master_lnx_noida
krvNetworkServiceKVP: SyslogServer=ralph-noida.swift.com
krvNetworkServiceKVP: adsite=India
krvNetworkServiceKVP: cupsserver=vlno-noidacups
krvNetworkServiceKVP: dnsserver_1=192.168.1.100
krvNetworkServiceKVP: dnsserver_2=192.168.2.100
所需输出应仅为:

dn: ipnetworknumber=172.23.48, ou=networks,ou=corp,ou=services,o=swift.com
krvNetworkServiceKVP: auto_master_lnx=auto_master_lnx_noida
krvNetworkServiceKVP: SyslogServer=ralph-noida.swift.com
krvNetworkServiceKVP: adsite=India
krvNetworkServiceKVP: cupsserver=vlno-noidacups
krvNetworkServiceKVP: dnsserver_1=192.168.1.100
krvNetworkServiceKVP: dnsserver_2=192.168.2.100

这可能就是您所需要的,假设您发布的预期输出有一个打字错误,使得第二条输出记录显示在两行上:

ldapsearch ... | awk -v RS= -v ORS='\n\n' -F'\n' 'NF>1'
鉴于您的评论,您可能需要以下其中一条:

ldapsearch ... | awk -v RS= -v ORS='\n\n' -F'\n' '$2!~/^ /'


或者。。。。基本上,您需要告诉我们打印行的标准。

发布所需的output@RomanPerekhrest,我刚刚用所需的输出更新了问题。对于第二个
dn
output块,
com
是否真的在第二行,或者是打字错误?如果是后者,则修复它。@EdMorton,这是预期的结果。不是100%确定这意味着什么,但如果您发布的预期输出不正确,则只需要您的问题来修复它。如果您可以添加有关开关的详细信息,那就太好了。您是正确的:)。。我会看的,谢谢你的时间!
ldapsearch ... | awk -v RS= -v ORS='\n\n' -F'\n' '$2~/^krvNetworkServiceKVP/'