如何编辑 7GB csv 文件中的一行?

如何编辑 7GB csv 文件中的一行?

我有一个 .csv 文件,大小为 7+ GB,有 30M 行。当我将文件加载到 SQL Server 中的数据库表中时,它报告存在某些格式问题的行的位置,可能是由于缺少某些字段。

我可以通过使用 less 来查看具有位置的行(即行号)

less +24923786 -N huge.csv

我尝试在 Emacs 中打开它,但它太大,Emacs 无法打开。正常吗? (我实际上在 git bash 和 Windows 中的便携式 Emacs 中使用less。所以我不知道成熟的 Emacs 是否可以打开它并允许我编辑该行。)

如何编辑 csv 文件中的行? (我对 Linux 中的工具感兴趣,或者 git bash 中可用的一些编辑器,或者有一个适用于 Windows 的便携式版本)

谢谢。

答案1

ed可以很容易地编辑一行。c是更改(替换)一行的命令;一行上的句点本身就是您已完成添加文本的信号;wq将更改的文件写回磁盘并退出 ed:

$ ed huge.csv
24923786c
new,data,goes,here
.
wq

或者作为 bash “one”-liner:

$ ed -s huge.csv <<< $'24923786c
new,data,goes,here
.
wq
'

答案2

如果你想在编辑器中实际编辑单行,你可以sed像这样使用来提取行,编辑然后拼接回去(假设兼容版本或 sed 在 git-bash 中 - 应该是):

sed '24923786,24923786p' -n huge.csv  > line.txt
edit line.txt
sed '24923786,24923786{s/.*/cat line.txt/e;}' -i huge.csv

请先测试并进行备份(您可以使用选项的后缀参数,i例如-i.bak让 sed 自动将原始文件备份到huge.csv.bak)。


旁白:如果没有一些编辑器对此有具体支持 - 打开并允许编辑巨大文本文件中的一系列行 - 但我不知道这一点,我会感到惊讶。我所知道的是 gedit(我的 goto 编辑器)在处理稍大的文件时会严重崩溃,而 vscode 似乎做得更好,但最近不必处理除此之外的问题。

相关内容