mysql - 如何使用 gawk 将 csv 转换为 xml?

标签 mysql xml csv awk gawk

我想在 Ubuntu 16.04 上使用 awk (gawk) 创建一个可执行文件,将 csv 文件转换为 xml 文件。根据我收集的信息,所需的格式如下。

$ cat tst.awk
BEGIN { FS="," }
NR==1 {
for (i=1; i<=NF; i++) {
    tags[i] = $i
}
next
}
{
print "<whatever>"
for (i=1; i<=NF; i++) {
    printf "    <%s>%s</%s>\n", tags[i], $i, tags[i]
}
print "</whatever>"
}

如何告诉 awk 插入每个字段并重复直到文件末尾?

输入

$ cat file.csv
id,color,status
7,black,open
52,white,closed

输出

awk -f tst.awk file.csv
<whatever>
    <id>7</id>
    <color>black</color>
    <status>open</status>
</whatever>
<whatever>
    <id>52</id>
    <color>white</color>
    <status>closed</status>
</whatever>

这会打印到屏幕上,但我需要它在输出文件中。如果某个字段为 1,我还需要设置 true,如果某个字段为 0,则设置 false。

需要的输出示例

<?xml version="1.0" encoding="UTF-8"?>
<Batch>
  <ASWFileVersion>
  <BatchHeader>
    <BatchId>965</BatchId>
    <UserBatchId>965</UserBatchId>
  </BatchHeader>
  <BatchCustomer>
     <EmployeeNumber>123456</EmployeeNumber>
     <FirstName>fname</FirstName>
     <LastName>lname</LastName>
     <Employee>true </Employee>
  </BatchCustomer>
  <BatchCustomer>
     <EmployeeNumber>654321</EmployeeNumber>
     <FirstName>first</FirstName>
     <LastName>lastn</LastName>
     <Employee>false</Employee>
  </BatchCustomer>
</Batch>

文件没有 header ,并且字段的顺序不正确,它们必须出现在 xml 中。有一个 bool 值 1 或 0 必须转换为 true 或 false。

最佳答案

您的问题中有太多文本需要费力阅读,但一般来说,以下是如何使用 awk 将 CSV 转换为 XML,因为这似乎是您问题的根源:

$ cat tst.awk
BEGIN { FS="," }
NR==1 {
    for (i=1; i<=NF; i++) {
        tags[i] = $i
    }
    next
}
{
    print "<whatever>"
    for (i=1; i<=NF; i++) {
        printf "    <%s>%s</%s>\n", tags[i], $i, tags[i]
    }
    print "</whatever>"
}

$ cat file.csv
id,color,status
7,black,open
52,white,closed

$ awk -f tst.awk file.csv
<whatever>
    <id>7</id>
    <color>black</color>
    <status>open</status>
</whatever>
<whatever>
    <id>52</id>
    <color>white</color>
    <status>closed</status>
</whatever>

希望有帮助。如果没有,则编辑您的问题以包含简洁、可测试的示例输入和预期输出。

关于mysql - 如何使用 gawk 将 csv 转换为 xml?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43522758/

相关文章:

MySQL - BETWEEN 将不会选择正确的结果

Enterprise Architect 的 MySQL 存储库?

xml - 如何在 foreignObject 中嵌入 SVG?

java - 几次快速标签切换后,Google BottomNavigationView 项目标题消失

python - 有没有办法在读取 csv 文件后删除它们?

mysql - 向查询添加 +1 以解决 "division by zero"错误

.net - .NET TableAdapter查询中的Mysql LIMIT语句

Java 从 SOAP 服务 URL 调用获取响应

python - 将 json 转换为 csv 时出现 "List index not in range"错误?

java - 将 CSV 文件读入不同类型的数组,然后读入 Arraylist