我遇到了这个任务。我有这样的清单:
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"
所以我想只搜索我有这些对的行:
具有不同序列的行,如:
将被拒绝。
我目前有这样的代码:
MRBTS-4132,4132,10.52.71.38
但是你可以看到它接受了一些缺失的行序列,我想避免这种情况。
答案 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