首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于遍历html文件并创建csv文件的脚本

用于遍历html文件并创建csv文件的脚本
EN

Stack Overflow用户
提问于 2015-12-08 18:15:25
回答 2查看 84关注 0票数 0

我有一个html文件,其中包含我正在处理的一个项目的依赖项列表。它的格式如下:

--一些html

代码语言:javascript
复制
  <p><strong>Module Name:</strong> spring-web</p>
   <p><strong>Module Group:</strong> org.springframework</p>
   <p><strong>Module Version:</strong> 4.2.1.RELEASE</p>

--更多html

代码语言:javascript
复制
 <p><strong>Module Name:</strong> google-http-client</p>
    <p><strong>Module Group:</strong> com.google.http-client</p>
    <p><strong>Module Version:</strong> 1.19.0</p>

我想从这个html文件创建一个csv文件,csv文件将具有每个记录的格式:

模块名称、模块组、模块版本

例如google-http-client,com.google.http-client,1.19.0

你知道怎么用脚本做到这一点吗?

EN

回答 2

Stack Overflow用户

发布于 2015-12-08 22:10:08

试试看!

代码语言:javascript
复制
#!/bin/bash
inFile=$1
outFile=$2

join () {
 local del=$1
 shift
 IFS="$del"
 source <(
        cat <<SOURCE
 echo "\${$1[*]}"
SOURCE
 ) 
 unset IFS
}

declare -a CSV=('"Module Name","Module Group","Module Version"')
declare -a keysAccepted=('Name' 'Group' 'Version')

declare -i nMandatoryKeys=${#keysAccepted[@]}
declare -A KeyFilled
rxKeysAccepted='('$(join '|' keysAccepted)')'
while read line; do
        [[ $line =~ \<strong\>Module\ $rxKeysAccepted:\</strong\>[[:space:]]*([^<]+)\</p\> ]] || continue
        key=${BASH_REMATCH[1]}
        val=${BASH_REMATCH[2]}
        KeyFilled[$key]=$val
        if (( ${#KeyFilled[@]} == nMandatoryKeys )); then
                unset csvLine
                for k in ${keysAccepted[@]}; do
                        csvLine+=${csvLine:+,}${KeyFilled[$k]}
                done
                KeyFilled=()
                CSV+=($csvLine)
        fi
done <"$inFile"

(( ${#CSV[@]} > 1 )) || exit 1

join $'\x0a' CSV >"$outFile"
票数 1
EN

Stack Overflow用户

发布于 2015-12-09 04:41:07

如果你的源文件是一致的(所有三个字段以相同的顺序同时存在),你可以尝试这样做...

代码语言:javascript
复制
$ sed -nr 's_\s*<p><strong>Module (Name|Group|Version):</strong> (.*)</p>_\2_p' file\
  | awk 'ORS=NR%3?",":RS'
spring-web,org.springframework,4.2.1.RELEASE
google-http-client,com.google.http-client,1.19.0
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34153237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档