使用awk将标签添加到CSV文件

时间:2014-11-14 04:32:44

标签: xml shell unix awk sed

我有一个包含321个条目的文件,这是标题:

  • BILLING_NAME
  • CONSUMER_ID
  • BILLING_ADDRESS1
  • BILLING_CITY
  • BILLING_STATE
  • BILLING_ZIP
  • BANK_ROUTING_NUMBER
  • ACH_ACCOUNT_NUMBER

我想在每个条目周围插入xml标记:

<billingName>Stackoverflow</billingname> <consumerID>4454</consumerID> etc

一直通过这个文件。上面的这些字段和其他一些未提及的字段将用于发出curl请求以通过API在文件中添加帐户,因此在我拥有所有必需的标记之后,我可以创建顺序xml请求。

我已经能够将上述所有数据与awk分开并生成8个不同的文件,但我不知道如何将它们连接在一起。

CSV中的字段分隔符是逗号(,),不幸的是,cut并没有完美的工作,因此可能会有一些我需要手动处理的记录。

我很确定这可以通过awk来完成,但我并不完全知道如何为所有记录循环它。

感谢您的帮助!

修改

最后一次修改将使所有这些工作变得完美。

awk -F, '{
filename = $2
$1 = "<api-request>";
$2 = "<verification>";
$3 = "<merchantId>11</merchantId>";
$4 = "<merchantKey>key</merchantKey>";
$5 = "</verification>";
$6 = "<command>add-ach-onfile</command>";
$7 = "<request>";
$8 = "<billingName>"$8"</billingName>";
$9 = "<customerId>"$9"</customerId>";
$10 = "<billingAddress1>"$10"</billingAddress1>";
$11 = "<billingCity>"$11"</billingCity>";
$12 = "<billingState>"$12"</billingState>";
$13 = "<billingZip>"$13"</billingZip>";
$14 = "<bankRoutingNumber>"$14"</bankRoutingNumber>";
$15 = "<achAccountNumber>"$15"</achAccountNumber>";
$16 = "</request>";
$17 = "</api-request>";
print > filename
}' 2export.csv

所以我自己知道8到15美元的工作,但我想加上1-7美元,16美元和16美元。 17所以api请求将完成。

<api-request> <verification> <merchantId>11</merchantId> <merchantKey>key</merchantKey> </verification> <command>add-ach-onfile</command> <request> <billingName>016114849</billingName> <customerId></customerId> <billingAddress1></billingAddress1> <billingCity></billingCity> <billingState></billingState> <billingZip></billingZip> <bankRoutingNumber></bankRoutingNumber> <achAccountNumber></achAccountNumber> </request> </api-request>

上图显示NEW标签有效但现有标签不包含数据。我非常确定我只需要更改$ 8-15的内容就可以从我的2export.csv文件中读取而不是从标准输入中读取,但我的所有尝试都无法正常工作。

1 个答案:

答案 0 :(得分:0)

您可以使用awk轻松完成它

$ awk -F, '{
 $1 = "<billing_name>"$1"</billing_name>";
 $2 = "<consumer_id>"$2"</consumer_id>";
 $3 = "<billing_address1>"$3"</billing_address1>";
 $4 = "<billing_city>"$4"</billing_city>";
 $5 = "<billing_state>"$5"</billing_state>";
 $6 = "<billing_zip>"$6"</billing_zip>";
 $7 = "<bank_routing_number>"$7"</bank_routing_number>";
 $8 = "<ach_account_number>"$8"</ach_account_number>";
 }1' test

将产生类似

的输出
<billing_name>stackoverflow</billing_name> <consumer_id>4454</consumer_id> etc

修改

将行拆分为不同的文件

$ awk -F, '{
     filename = $1
     $1 = "<billing_name>"$1"</billing_name>";
     $2 = "<consumer_id>"$2"</consumer_id>";
     $3 = "<billing_address1>"$3"</billing_address1>";
     $4 = "<billing_city>"$4"</billing_city>";
     $5 = "<billing_state>"$5"</billing_state>";
     $6 = "<billing_zip>"$6"</billing_zip>";
     $7 = "<bank_routing_number>"$7"</bank_routing_number>";
     $8 = "<ach_account_number>"$8"</ach_account_number>";

     print > filename
     }' test