mysql - 使用awk将csv文件解析为数组

标签 mysql file csv awk

我必须解析一个 csv 文件并将其内容转储到 mysql 表中。


# myfile.csv

# Contents
# Sample Headers

"header1 with quotes", header2withoutquotes, "header3", header4, hdeader5
"Sample Text",2,3,4,"MoreText, with commas"
"Text2 with escaped \"",8,6,7,9
"Text3",876,0.6,7,10

第一个输出


rowid|header1 with quotes|Sample Text|myfile
1|header2withoutquotes|2|myfile
1|header3|3|myfile
1|header4|4|myfile
1|header5|MoreText, with commas|myfile

2|header1 with quotes|Text2 with escaped \"|myfile
2|header2withoutquotes|8|myfile
2|header3|6|myfile
2|header4|7|myfile
2|header5|9|myfile

3|header1 with quotes|text3|myfile
3|header2withoutquotes|876|myfile
3|header3|0.6|myfile
3|header4|7|myfile
3|header5|10|myfile

在第二个输出中,我需要水平对齐自定义标题。例如


rowid|"header1 with quotes"|"header3"|header4|filename 
1|Sample Text|3,4,myfile
2|Text2 with escaped \"|6|7|myfile
3|Text3|0.6|7|myfile

对于第二个输出,它可以是我选择的任何一组标题。 然后我可以使用加载数据 infile 将这两个输出数据加载到 mysql 表中。寻找 awk 脚本来实现这一点。需要帮助请叫我。发送。

最佳答案

这应该有效:

{
    if(NR==1)
        split($0,header,",")
    else
    {
        split($0,line,",")
        for (i in line)  
        {
            gsub(/^[ \t]+|"|[ \t]+$)/, "", header[i]); 
            gsub(/^[ \t]+|"|[ \t]+$)/, "", line[i]); 
            print header[i]"|"line[i]"|"FILENAME
        }
        print ""
    }
}

基本上它将第一行存储在 header 数组中,然后它拆分 elem 数组中的每一行并修剪掉前导和尾随空格或制表符。最后,它组成输出字符串。

输出:

header1|text1|file2
header2|2|file2
header3|3|file2
header4|4|file2
hdeader5|moretext|file2

header1|text2|file2
header2|8|file2
header3|6|file2
header4|7|file2
hdeader5|9|file2

header1|text3|file2
header2|876|file2
header3|0.6|file2
header4|7|file2
hdeader5|10|file2

您可以通过删除最后一个 print "" 语句来摆脱每个 block 之间的换行符。

关于mysql - 使用awk将csv文件解析为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35111652/

相关文章:

java - 在Java中列出文件的最佳方法,按修改日期排序?

c# - 在 C# 中,如何从字符串创建 TextReader 对象(不写入磁盘)

mysql - 更改特定类别的价格

python - 将记录插入 Raspberry Pi 上的 MySQL 数据库时打开/关闭 LED

ajax - 通过 List<HttpPostedFileBase> 发布多个文件

c++ - 在 "a"(追加)模式下打开文件时 fseek 不起作用

php - 如何获取逗号分隔值对应的记录?

mysql - 如何在多个 LIKE 查询中跳过空的 LIKE 运算符?

Python将多个JSON对象解析为一个对象

mysql - 从表中删除多个没有 ID 的条目