Awk 要添加到

Awk 要添加到,awk,sed,Awk,Sed,我需要通过读取csv文件来附加到xml文件 i/p文件模式 test.dat account,bill,bill seg 12345,12445,121 14456,14467,903 14456,14467,903 我需要将每一行添加到xml文件示例xml文件中 <?xml version="1.0" encoding="UTF-8"?> <BusinessConfiguration xmlns="http://www.portal.com/schem

我需要通过读取csv文件来附加到xml文件

i/p文件模式 test.dat

account,bill,bill seg
12345,12445,121

14456,14467,903

14456,14467,903
我需要将每一行添加到xml文件示例xml文件中

<?xml version="1.0" encoding="UTF-8"?>

<BusinessConfiguration
        xmlns="http://www.portal.com/schemas/BusinessConfig"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.portal.com/schemas/BusinessConfig BusinessConfiguration.xsd">

        <!-- Sample input file for pin_bill_accts containing parameters for bill run management -->
        <!-- Modify according to guidelines -->
        <BillRunConfiguration>
                <!-- List of DOMs for this bill run -->
                <DOMList>
                        <DOM>---1</DOM>
                </DOMList>
              <BillSegmentList>
                </BillSegmentList>

                <!-- List of billing segments for this bill run -->
                <BillingList>
                </BillingList>

---1
我需要将csv中的前2条记录添加到标记下面,如

<BillingList>
                  <Account>12345</Account>
                    <Billinfo>12445</Billinfo>
                </BillingList>
                  <BillingList>
                    <Account>14456</Account>
                   <Billinfo>14467</Billinfo>
                   </BillingList>

12345
12445
14456
14467
我目前有以下代码:

#!/bin/awk -f

NR==FNR{ a[NR]=$0; next; }
/<BillingList>/{
    print;
    gsub("'","",a[++i]);
    n=split(a[i],arr,",");
    if( n!= 3) { next }
    print "\t<Account>",arr[1],"</Account>";
    print "\t<Billinfo>",arr[2],"</Billinfo>";
    next;
}1
#/垃圾箱/awk-f
NR==FNR{a[NR]=$0;下一步;}
//{
打印
gsub(“,”,a[++i]);
n=拆分(a[i],arr,“,”;
如果(n!=3){next}
打印“\t”,arr[1],”;
打印“\t”,arr[2],”;
下一个
}1
但它只替换第一条记录,然后停止。
我对unix完全陌生,因此请帮助我解决这个问题。

这将为您提供该部分

$ awk -F,                                       # use comma as field separator
          'NR>1&&NF{                            # skip first line and blank lines
                print                           # print the following
                   "<BillingList>               
                      <Account>"$1"</Account>    # insert first field
                      <BillInfo>"$2"</BillInfo> # insert second field
                   </BillingList>"
           }' data.txt
$awk-F,#使用逗号作为字段分隔符
'NR>1&&NF{#跳过第一行和空行
打印#打印以下内容
"               
“$1”#插入第一个字段
“$2”#插入第二个字段
"
}'data.txt

如果需要,可以在正确的位置添加换行符。

输出xml文件是预先存在的还是从头开始创建的?您如何读取csv文件?您当前的代码是什么样子的?我编写了下面的代码,但是它只重新编译第一个实例#/bin/awk-FNR==FNR{a[NR]=$0;next;}/{print;gsub(“,”,a[++i]);n=split(a[i],arr,”,”);如果(n!=3){next}print“\t”,arr[1],”;print“\t”,arr[2],”;next;}1你应该在问题中添加该代码,它希望csvsorry JAL第一个计时器中的每一行的BillingList标记都是xml格式的,不会再出现了。谢谢你也能解释一下代码吗?嗨,代码只添加了所需的段,但我需要将它们附加到同一个xml文件中。你能告诉我怎么做吗---1嗨,我需要在xml标记之前添加段。你能告诉我怎么做吗?你可以一直使用awk,但使用sed可能更容易,只需两步`sed-e”//r awkoutput.txt“template.xml”已在模板中,因此应修改awk以仅生成子节点。