【问题标题】:split string comma delimited to defined xml strucutre拆分字符串逗号分隔到定义的 xml 结构
【发布时间】:2018-10-02 02:08:43
【问题描述】:

我有一个这样的输入字符串

<keywords>key word 1, key word 2, key word 3, key word 4, key word 5, key word 6, ..  </keywords>

最多可以有 10 个关键字 我必须将其转换为以下 xml 结构

<keyword1>key word 1</keyword1>
<keyword2>key word 2</keyword2>
<keyword3>key word 3</keyword3>
<keyword4>key word 4</keyword4>
<keyword5>key word 5</keyword5>
<keyword6>key word 6</keyword6>
<keyword7>...</keyword7>

我的脚本的其余部分是用于替换标签的简单 sed / awk 命令,仅此而已。 有人知道我如何将其转换为所需的结构吗? 感谢您的任何建议

更新:

我尝试了以下操作(来自post

echo "<keywords>key word 1, key word 2, key word 3, key word 4, key word 5 </keywords>" | awk '{split($0,a,","); print "<keyword1>"a[1]"</keyword1>\n<keyword2>"a[2]"</keyword2>\n<keyword3>"a[3]"</keyword3>\n<keyword4>"a[4]"</keyword4>\n<keyword5>"a[5]"</keyword5>\n<keyword6>"a[6]"</keyword6>\n<keyword7>"a[7]"</keyword7>\n<keyword8>"a[8]"</keyword8>\n<keyword9>"a[9]"</keyword9>\n<keyword10>"a[10]"</keyword10>\n"}' | sed -e 's/<keywords>//g' |sed -e 's/<\/keywords>//g' 

效果很好,输出如下:

<keyword1>key word 1</keyword1>
<keyword2> key word 2</keyword2>
<keyword3> key word 3</keyword3>
<keyword4> key word 4</keyword4>
<keyword5> key word 5 </keyword5>
<keyword6></keyword6>
<keyword7></keyword7>
<keyword8></keyword8>
<keyword9></keyword9>
<keyword10></keyword10>

也许这不是最好的方法……但它确实有效。 如果您有更好/更快的解决方案,我将不胜感激……

2 更新: 是否有机会仅对/&lt;keywords&gt;/,/&lt;\/keywords&gt;/ 之间的文本执行 awk / sed 命令

【问题讨论】:

    标签: bash awk sed


    【解决方案1】:

    使用 sed 和 awk:

    sed 's|</*keywords>||g; s/, /\n/g' | awk '{print "<keyword" NR ">" $0 "</keyword" NR ">"}'
    

    输出:

    <keyword1>key word 1</keyword1>
    <keyword2>key word 2</keyword2>
    <keyword3>key word 3</keyword3>
    <keyword4>key word 4</keyword4>
    <keyword5>key word 5</keyword5>
    <keyword6>key word 6</keyword6>
    <keyword7>..  </keyword7>
    

    NR:目前看到的输入记录总数。

    【讨论】:

      【解决方案2】:

      使用awk 而不使用sed

      awk -F " *<[^<>]+> *|, *" '{
          r = "";
          for(i=1; i<=NF; i++) {
              if ($i) r = r "<keyword" ++j ">" $i "</keyword" j ">" RS
          }
          print r;
      }' file
      

      这种方法将现有标签和逗号定义为字段分隔符。一个班轮:

      echo ... | awk -F " *<[^<>]+> *|, *" '{ r = ""; for(i=1; i<=NF; i++) { if ($i) r = r "<keyword" ++j ">" $i "</keyword" j ">" RS } print r;}'
      

      【讨论】:

        【解决方案3】:
        awk -F' *, *' '
            gsub(/<\/?keywords>/,"") {
                for (i=1; i<=NF; i++) {
                    print "<keyword"i">" $i "</keyword"i">"
                }
            }
        ' file
        <keyword1>key word 1</keyword1>
        <keyword2>key word 2</keyword2>
        <keyword3>key word 3</keyword3>
        <keyword4>key word 4</keyword4>
        <keyword5>key word 5</keyword5>
        <keyword6>key word 6</keyword6>
        <keyword7>..  </keyword7>
        

        【讨论】:

          猜你喜欢
          • 2018-12-21
          • 2015-03-07
          • 1970-01-01
          • 2017-01-05
          • 2012-05-24
          • 2023-04-09
          相关资源
          最近更新 更多