【发布时间】:2020-03-28 12:10:11
【问题描述】:
在一个 .xml 文件中,我有一些信息:
<var name="site1">
<location lat="45.4558" lon="-98.4131" ht="422.0"/>
</var>
<var name="site2">
<location lat="35.1497" lon="-106.8239" ht="1814.0"/>
</var>
<var name="site3">
<location lat="36.9839" lon="-77.0075" ht="78.0"/>
</var>
我想在搜索“sitex”后提取该行。这很容易做到:
awk '/site1/{getline;print}'
哪个,会正确输出:
<location lat="45.4558" lon="-98.4131" ht="422.0">
现在,如果我想获取纬度信息,我可以使用完整的行来做到这一点:
awk '/site1/{getline;print}' | awk '{print $2}' | cut -d \" -f2
正确的结果是 45.4558。
现在,如果我想将一个变量传递给 awk,这可以通过 '-v' 命令完成,我有如下所示的内容:
locc="site1"
awk -v var="$locc" '/var/{getline;print}' | awk '{print $2}' | cut -d \" -f2
但是,这不会产生任何结果(即没有输出)。这里可能有什么问题?如果我只是尝试:
awk -v var="$locc" 'BEGIN{print var}'
我得到 site1 作为输出。因此,它正确加载了我传递的字符串,但没有正确解析信息。
【问题讨论】:
-
这不是 getline 的合适工作,请参阅 awk.freeshell.org/AllAboutGetline。