使用Bash根据特定属性查找重复的XML数据
是否可以根据特定的Xml属性提取所有Xml值: 例如,我需要考虑所有具有相同auth_用户名的手机(第一个和最后一个手机具有相同的auth_用户名)使用Bash根据特定属性查找重复的XML数据,xml,bash,duplicates,Xml,Bash,Duplicates,是否可以根据特定的Xml属性提取所有Xml值: 例如,我需要考虑所有具有相同auth_用户名的手机(第一个和最后一个手机具有相同的auth_用户名) <Fund> <mobile> <auth_username>736994</auth_username> <client_name>736994_iPad</client_name> <first_name>Yamelin&
<Fund>
<mobile>
<auth_username>736994</auth_username>
<client_name>736994_iPad</client_name>
<first_name>Yamelin</first_name>
<last_name>test</last_name>
</mobile>
<mobile>
<auth_username>735139</auth_username>
<client_name>735139_iPad</client_name>
<first_name>Eunbi</first_name>
<last_name>Eunbi</last_name>
</mobile>
<mobile>
<auth_username>733279</auth_username>
<client_name>733279_iPad</client_name>
<first_name>wang</first_name>
<last_name>test</last_name>
</mobile>
<mobile>
<auth_username>737618</auth_username>
<client_name>737618_iPad</client_name>
<first_name>test</first_name>
<last_name>testLast</last_name>
</mobile>
<mobile>
<auth_username>736994</auth_username>
<client_name>734131_iPad</client_name>
<first_name>Kai</first_name>
<last_name>test</last_name>
</mobile>
</Fund>
736994
736994_iPad
亚梅林
测试
735139
735139_iPad
恩比
恩比
733279
733279_iPad
王
测试
737618
737618_iPad
测试
试片
736994
734131_iPad
凯
测试
所需的输出必须如下所示:
<Fund>
<mobile>
<auth_username>736994</auth_username>
<client_name>736994_iPad</client_name>
<first_name>Yamelin</first_name>
<last_name>test</last_name>
</mobile>
<mobile>
<auth_username>736994</auth_username>
<client_name>734131_iPad</client_name>
<first_name>Kai</first_name>
<last_name>test</last_name>
</mobile>
</Fund>
736994
736994_iPad
亚梅林
测试
736994
734131_iPad
凯
测试
我尝试使用xmlstarlet,但我只有auth_用户名作为输出
数据基金=$(xmlstarlet sel-T-T-m“基金/手机”-n-v“auth_username”~/Desktop/DeviceAndUserFund2.csv | sort | uniq-d)
这是另一种方法吗?Bash特性本身并不非常适合您的XML需求类型。但是,以下是两种解决方案,它们都利用了 解决方案1—使用xmlstarlet:
.xsl
。让我们命名文件get dupes.xsl
获取副本。xsl
xml tr/path/to/get-dupes.xsl/path/to/input.xml
注意:上述命令中的/path/to/
部分应更改为实际文件的实际路径的元素
xml tr
命令的一般用法是:
xmltr[]{-p |-s=}[…]
解决方案2-使用xsltproc: 您还可以通过(已预装在macOS上)实现这一点 使用名为
get_dupes.xsl
(如上所示)的相同XSLT样式表,您可以:
xsltproc/path/to/get-dupes.xsl/path/to/input.xml
xsltproc
。例如:
cat input.xml | xsltproc/path/to/get-dupes.xsl-
注意,上面使用了尾随连字符(-
)从标准输入读取源xml数据DataFund
的变量,可以执行以下操作:
DataFund=“$(xsltproc/path/to/get-dupes.xsl/path/to/input.xml)”
省略xml声明=“否”
属性更改为省略xml声明=“是”
Bash是错误的工具。不要用锤子拧紧。