gpt4 book ai didi

csv - 从具有多行字段的大型 csv 中删除重复行

转载 作者:行者123 更新时间:2023-12-02 18:13:05 25 4
gpt4 key购买 nike

给定以下带有多行字段的 csv:

"id","text"
"1","line 1
line 2"
"2","line 1
line 2"
"1","line 1
line 2"

...显示为:

<表类=“s-表”><标题>id文本 <正文>1第 1 行
第 2 行2第 1 行
第 2 行1第 1 行
第 2 行

如果我使用以下awk命令根据 id(第 1 列)从此 csv 中删除重复行:

awk -F, '!x[$1]++' 'file-01.csv' > 'file-01-deduped.csv'

我最终得到:

"id","text"
"1","line 1
line 2"
"2","line 1

显示为:

<表类=“s-表”><标题>id文本 <正文>1第 1 行
第 2 行2第 1 行

这是一个过于简单化的例子,但看起来awk不能很好地处理多行字段。也许我错过了一些东西。

其他信息:我正在根据 RFC4180 standards 编写这些 csv - 最值得注意的是,包含换行符、双引号和逗号的字段用双引号括起来。字段内出现的双引号会使用前面的双引号进行转义。

另外,我正在 Node/JS 中编写 csv,但我发现 awk过去,这是一种非常简单/快速的对非常大的文件进行重复数据删除的方法,但没有一个文件具有多行字段。

我决不受 awk 的约束-我愿意接受任何/所有建议 - 只是想弄清楚我已经尝试过什么。谢谢!

最佳答案

仅使用您显示的示例,请尝试以下 awk代码。用 GNU 编写和测试 awk ,应该适用于任何 awk .

awk -F',' '
FNR>1{
sub(/^"/,"",$2)
sub(/"$/,"",$3)
gsub(/"/,"",$1)
print $1 OFS $2 ORS " " $3
}
' <(awk '{printf("%s%s",$0!~/^"/?",":FNR>1?ORS:"",$0)} END{print ""}' Input_file)

解释:简单的解释是,运行第一个 awk打印单行中的所有行(无论它的行不是从 " 开始的)并将其输出作为输入发送到 main awk根据要求打印所需的 id 值和所有行值。

关于csv - 从具有多行字段的大型 csv 中删除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72008260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com