我有两个文件。一个仅包含一列随机整数。 1.数据:
2
4
7
9
其他文件 (2.dat) 包含以下内容:
<event id="2">
<rwgt>
<wgt id="1">0.866665</wgt>
<wgt id="2">0.866665</wgt>
<event id="3">
<rwgt>
<wgt id="1">0.901111</wgt>
<wgt id="2">0.901111</wgt>
....
我想将1.dat中的每个数字与里面的数字进行比较
<event id=" "> tag
当匹配时我想要里面的数字
<wgt id="1"> </wgt> tag
我正在使用 shell 脚本中的第一个文件
#! /bin/bash
while read first ;
do
echo "$first"
done < 1.dat
但是在 do 循环内我仍然无法合并 2.dat 文件。 任何人都可以帮忙吗?
最佳答案
为了扩展我上面的评论,如果您的真实文件是有效的 XML,如下所示:
<?xml version="1.0"?>
<root>
<event id="2">
<rwgt>
<wgt id="1">0.866665</wgt>
<wgt id="2">0.866665</wgt>
</rwgt>
</event>
<event id="3">
<rwgt>
<wgt id="1">0.901111</wgt>
<wgt id="2">0.901111</wgt>
</rwgt>
</event>
</root>
然后您可以使用 XML 解析器(例如 xmllint)来提取您感兴趣的值:
#!/bin/bash
while read id; do
val=$(xmllint --xpath "//event[@id='$id']//wgt[@id=1]/text()" 2.dat 2>/dev/null)
[[ -n $val ]] && echo "$val"
done < 1.dat
这里我使用了 xpath 表达式来获取 <wgt>
的文本内容元素为 id=1
,在<event>
内具有匹配 id
的元素为文件中的值。如果没有匹配的内容,则会向 stderr 打印一条消息,因此我将其重定向到 /dev/null
来压制它。
输出:
0.866665
关于linux - 比较一个文件中的数字,并在该数字出现在 shell 脚本中的字符串内时将其与文件中的数字进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29192863/