1

我可以使用什么方法从 csv/txt 文件中删除太大而无法加载到内存中并手动编辑的特定行?

背景

我的问题实际上是对与将 csv 导入 sql 数据库相关的问题的间接解决方案。

我有一系列 10-30gb 的 csv 文件,我想从 R 中导入并填充一个 sqlite 表(因为它们太大而无法作为一个整体的数据帧导入到 R 中)。我为此使用了“RSQlite”包。

一对夫妇因为与其中一行格式错误相关的错误而失败。然后取消填充过程。R 返回导致进程失败的行号。

给出的错误是:

./csvfilename line 102206973 expected 9 columns of data but found 3)

所以我确切地知道导致错误的行。

我看到了 2 个潜在的“间接”解决方案,我希望有人可以帮助我。

(i) 删除 20+gb 文件中导致错误的行。例如上面示例中的第 102,206,973 行。我不担心通过跳过或删除第 102,206,973 行中的数据来“丢失”它。但是,我尝试并未能以某种方式访问​​ csv 文件并删除该行。

(ii) 直接使用 sqlite(或其他任何东西?)导入一个 csv,它允许您跳过行或错误。

虽然不太可能与解决方案直接相关,但这里是使用的 R 代码。

db <- dbConnect(SQLite(), dbname=name_of_table)
dbWriteTable(conn = db, name ="currentdata", value = csvfilename, row.names = FALSE, header = TRUE)

谢谢!

4

1 回答 1

6

要删除特定行,您可以使用sed

sed -e '102206973d' your_file

如果您希望就地完成更换,请执行

sed -i.bak -e '102206973d' your_file

这将创建一个备份名称your_file.bakyour_file删除指定的行。

例子

$ cat a
1
2
3
4
5
$ sed -i.bak -e '3d' a
$ cat a
1
2
4
5
$ cat a.bak 
1
2
3
4
5
于 2013-11-04T11:28:53.047 回答