1

我有一个 pdf 文档,我已将其转换为 XML 文档(使其更易于使用),我需要删除大部分数据并将成对的行更改为 csv 格式。这是我的 XML 中的内容:

<text top="231" left="75" width="154" height="11" font="2">JGD0002250185412827</text>
<text top="231" left="288" width="122" height="11" font="2">CODE99876</text>
<text top="231" left="482" width="8" height="11" font="2">1</text>
<text top="231" left="555" width="57" height="11" font="2">IP65 5LK</text>
<text top="231" left="696" width="89" height="11" font="2">Malcolm Montgomery</text>
<text top="252" left="75" width="154" height="11" font="2">JGD0012564109019827</text>
<text top="252" left="288" width="122" height="11" font="2">CODE4674</text>
<text top="252" left="482" width="8" height="11" font="2">1</text>
<text top="252" left="551" width="65" height="11" font="2">CV98 3LN</text>
<text top="252" left="680" width="121" height="11" font="2">WILLIAM SHATNER</text>

我需要从中得到类似以下的东西:

"CODE99876","JGD0002250185412827","IP65 5LK"
"CODE4674","JGD0012564109019827","CV98 3LN"

我假设这是可能的,但到目前为止还没有运气(实际上是灾难,我的输出看起来就像一个愤怒的孩子拿着一桶字母意大利面去了城里)。

4

2 回答 2

4
$ awk -F'[<>]' -v OFS='","' '{idx=NR%5; a[idx]=$3} !idx{print "\"" a[2], a[1], a[4] "\""}' file
"CODE99876","JGD0002250185412827","IP65 5LK"
"CODE4674","JGD0012564109019827","CV98 3LN"
于 2013-08-15T16:06:43.793 回答
2

这也有效。

#!/usr/bin/awk -f

{
    if (/<text .*<\/text>/) {
        i = ++vr % 5
        if (i == 0) {
            print "\"" a[2] "\",\"" a[1] "\",\"" a[4] "\""
        } else {
            sub(/<\/text>.*/, "")
            sub(/.*<text .*>/, "")
            a[i] = $0
        }
    }
}
于 2013-08-15T16:51:05.080 回答