仅返回具有特定模式的行序列

时间:2016-03-10 11:01:20

标签: bash awk grep

我遇到了这个任务。我有这样的清单:

promise(B)

我正在做那样的最终文件:

(...)
distName="PLMN-PLMN/MRBTS-4130/LNBTS-4130/FTM-1/IPNO-1"    
"btsId">4130<  
IpAddress">10.52.71.38</p> 
(...)

但有时缺少一些部分,文件看起来像:

MRBTS-4130,4130,10.52.71.38

在我的最终文件中,我希望只有这样的行:

distName="PLMN-PLMN/MRBTS-4130/LNBTS-4130/FTM-1/IPNO-1"    
"btsId">4130<  
distName="PLMN-PLMN/MRBTS-4132/LNBTS-4132/FTM-1/IPNO-1" 
"btsId">4132<  
IpAddress">10.52.71.38</p>  
distName="PLMN-PLMN/MRBTS-4135/LNBTS-4135/FTM-1/IPNO-1" 
"btsId">4135<  
distName="PLMN-PLMN/MRBTS-4138/LNBTS-4138/FTM-1/IPNO-1" 

所以我想只搜索我有这些对的行:

  • 第一行有一个distName
  • 第二行有btsId
  • 第三行有IpAddress

具有不同序列的行,如:

  • first distName
  • second btsId
  • 第三个distName再次

将被拒绝。

我目前有这样的代码:

MRBTS-4132,4132,10.52.71.38

但是你可以看到它接受了一些缺失的行序列,我想避免这种情况。

2 个答案:

答案 0 :(得分:0)

gawk:

awk -v RS='distName=' -F "[<>/]" 'NR!=1{print $2","$7","$10}' file.txt

答案 1 :(得分:0)

毕竟使用ElementTree库将python用于该解决方案要容易得多。代码是

from xml.etree import ElementTree
import os

HOME = os.environ['HOME']

with open(HOME+'/TF/topo/topo.xml', 'rt') as f:
    tree = ElementTree.parse(f)

for node in tree.findall('.//{raml20.xsd}managedObject'):
    btsId=None
    Ip=None
    for p in node.findall('{raml20.xsd}p'):
        if p.attrib.get('name')=='btsId':
            btsId=p.text
        elif p.attrib.get('name')=='IpAddress':
            Ip=p.text
    if btsId and Ip:
        print "MRBTS-"+btsId+";"+Ip