awk处理xml文件&&封装集合变量和调用

对于Hadoop配置本地存储路径:

<property><name>dfs.datanode.data.dir</name><value>file:///dfs/data</value></property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:///mnt/datadir1/data,/mnt/datadir2/data,/mnt/datadir3/data</value>

</property>

  • 可以严格按照XML换行和缩进格式配置,也可以配置到一行中;
  • 可以带file://前缀也可以不带;

注: 在 Hadoop 的配置中,dfs.datanode.data.dir 是用来指定本地文件系统上的目录路径。默认情况下,Hadoop 会将这些路径解释为本地文件系统上的路径,因此不需要显式地添加 file:/// 前缀。

awk是行处理工具,那么如何处理这种结构化的数据块呢?并且要兼顾单行和多行配置。

其实也不难。。

bash 复制代码
sudo cat "$hadoop_conf/hdfs-site.xml" | awk '
  /<name>dfs.datanode.data.dir<\/name>/ {
    if($0!~/<value>/){getline}     #如果<name>节点上没有<value>子节点,读取下一行
    sub(/.*<value>/, "")           #剔除<value>及之前的空行
    sub(/<\/value>.*/, "")         #剔除</value>及之后的空行
    sub(/file:\/\//, "")           #剔除file://前缀
    gsub(/,/, "\n")                #将以逗号分割的多个目录换行打印
    print
}'

效果如下:

如果集合不直接打印,而是要封装成集合,以待后续处理呢?

bash 复制代码
sudo cat "$hadoop_conf/hdfs-site.xml" | awk '
  /<name>dfs.datanode.data.dir<\/name>/ {
    if($0!~/<value>/){getline}
    sub(/.*<value>/, "")
    sub(/<\/value>.*/, "") 
    sub(/file:\/\//, "") 
    split($0, paths, /,/)
    for (i in paths){
      result[count++] = paths[i]
    }
}END {
    # 打印数组内容
    for (i = 0; i < length(result); i++) {
      print result[i]
    }

}'

这里为啥要将paths集合中的数据倒腾到result数组中,知道为啥吗?

效果如下:

相关推荐
sbjdhjd6 小时前
从污点追踪断点到 PHP-FPM 请求队列:HIDS PHP WebShell 样本复盘
开发语言·网络安全·数据挖掘·渗透测试·开源·php·shell
SEO_juper7 小时前
Go 站点地图生成器:从首页爬全站,一键生成 sitemap.xml
xml·开发语言·人工智能·golang·node.js·seo·外贸独立站
可爱系程序猿2 天前
XML 导入失败并指向 msxml6.dll:用最小样本区分解析错误与组件加载
xml·程序人生·电脑
SEO_juper3 天前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
步行cgn3 天前
Spring MVC 核心配置文件详解:springmvc.xml 每一行配置的意义
xml·spring·mvc
Shell运维手记3 天前
Shell 结构化命令知识点总结(case、for、while)
运维·microsoft·shell·脚本
云计算练习生3 天前
什么是 Bash?Linux 默认 Shell 的核心功能
linux·操作系统·bash·shell·命令解释器
猫咪很可爱4 天前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
泡海椒4 天前
JQuick-SQL JQuickTable 模型:XML 动态 SQL 的表封装边界
xml·数据库·sql
supabc1235 天前
欧盟电子发票(XRechnung/Peppol/ZUGFeRD)踩坑记:用 Python 不装 Java 跑官方校验规则
xml·python·开源·电子发票·1024程序员节