java - 解析EVA格式的数据

标签 java regex awk

我正在尝试从 EVA 获取数据二进制数据库,其中字段由一些特殊符号分隔。到目前为止,我已成功将日期转换为以下格式的类似 XML 的文本文件。请注意字段的顺序如何变化,并且并非所有字段都是必需的。

<251>id1<230><223>author1<228><215>title1<223><230>year1<225><232>location1<226>
<251>id2<230><223>author2<228><230>year2<225><232>location2<226><215>title2<223>
<251>id3<230><230>year2<225><232>location2<226><215>title2<223>

每一行都是单独的条目,对于每一行我都想得到类似的东西

251=id1
223=author1

等等

现在我正在努力解析其中的数据。我通常使用爆炸函数并定义分隔符,但我不能在这里这样做,因为那样我会丢失某个子字符串属于哪个字段的信息。

也许我应该提到,最后我想生成一个 CSV 文件,所以也许有一种方法可以直接从我的文本文件解析它,跳过单独解析每个数据的冗余过程,然后以另一种格式再次合并它.

最佳答案

像这样吗?

$ cat tst.awk
BEGIN {
    FS="[<>]+"
    OFS="="
}
{
    for (i=2;i<NF;i+=3) {
        print $i, $(i+1)
    }
    print ""
}
$ awk -f tst.awk file
251=id1
223=author1
215=title1
230=year1
232=location1

251=id2
223=author2
230=year2
232=location2
215=title2

251=id3
230=year2
232=location2
215=title2

重新阅读您的问题后,这可能更接近您真正想要的:

$ cat tst.awk
BEGIN { FS="[<>]+"; OFS="," }

{
    for (i=2;i<NF;i+=3) {
        if (!seenName[$i]++) {
            names[++numNames] = $i
        }
        n2v[NR,$i] = $(i+1)
    }
}

END {
    for (nameNr=1; nameNr<=numNames; nameNr++) {
        printf "%s%s", names[nameNr], (nameNr<numNames?OFS:ORS)
    }

    for (recNr=1; recNr<=NR; recNr++) {
        for (nameNr=1; nameNr<=numNames; nameNr++) {
            name = names[nameNr]
            printf "%s%s", n2v[recNr,name], (nameNr<numNames?OFS:ORS)
        }
    }
}
$
$ awk -f tst.awk file
251,223,215,230,232
id1,author1,title1,year1,location1
id2,author2,title2,year2,location2
id3,,title2,year2,location2

如果没有,请更新您的问题,以根据您发布的输入显示您想要的实际输出。

关于java - 解析EVA格式的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208040/

相关文章:

java - 声明一个变量来存储字符串的第三个和第六个字符并测试它们是否是斜杠

java - CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES 未反射(reflect)在 swagger.json 中

java - Jooq模型生成中的字符集问题

regex - 替换零并修剪空间regex模式似乎无法在Elasticsearch分析器中正常工作

python - 正则表达式 (vim) 用于 print ... to print(...) 用于 python2 到 python3

linux - 如何在 Linux 中使用 awk/sed 或其他命令删除某些字符串?

java - JPA双向OneToMany关系-无法删除子项

bash - 使用 gawk 解析 CSV 文件

regex - 已编辑 : Grep/Awk- Print specific info from table

c# - 使用正则表达式比使用 IndexOf 更快吗?