我可以使用哪种方法从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)
谢谢!
答案 0 :(得分:6)
要删除特定行,您可以使用sed
:
sed -e '102206973d' your_file
如果您希望替换就地,请执行
sed -i.bak -e '102206973d' your_file
这将创建一个备用名称your_file.bak
,而your_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