编辑4000000行CSV文件中一列中的值



我有一个CSV文件,我正试图编辑它,以添加一个数字ID类型列,其中包含1到大约4000000之间的唯一整数。有些字段已经有一个ID值,所以我希望我可以对这些字段进行排序,然后从最大值+1开始填写。但是,由于该文件的大小,我无法在Excel中打开该文件进行编辑(我只能看到最大1048000行或任何行(。有简单的方法吗?我不熟悉编码,所以我希望有一种类似于Excel填充序列功能的手动方法。

谢谢!

-此外,我知道有一些关于如何编辑大型CSV文件的线程,但我希望得到如何编辑这个特定功能的帮助。谢谢

-我想基本上根据idnumber对行进行排序,然后将唯一的ID添加到没有该ID值的行中文件屏幕截图

一种方法,使用Notepad++和一个名为SQL:的插件

  1. 在Notepad++中加载CSV

  2. 从数据中选择a+1、b、c

  3. 点击"启动">

从这样的文件开始时:

a,b,c
1,2,3
4,5,6
7,8,9

之后的结果看起来像这样:

SQL Plugin 1.0.1025
Query         : select a+1,b,c from data
Sourcefile    : abc.csv
Delimiter     : ,
Number of hits: 3
===================================================================================
Query result:
2,2,3
5,5,6
8,8,9

或者,换句话说,第一列增加1。

第二个解决方案,使用gawk,从下载https://www.klabaster.com/freeware.htm#mawk:

D:TEMP>type abc.csv
a,b,c
1,2,3
4,5,6
7,8,9
D:TEMP>gawk  "BEGIN{ FS=OFS=","; getline; print $0 }{ print $1+1,$2,$3 }" abc.csv
a,b,c
2,2,3
5,5,6
8,8,9

(g( awk-id是一种逐行读取文件的工具。然后可以通过$0访问线路,并使用分隔符通过$1,$2,$3,...访问线路中的零件。

这个分隔符在我的示例(FS=OFS=",";(中的BEGIN部分中设置,每个输入文件只执行一次。不要被"弄糊涂。这是因为脚本位于双引号之间,并且变量(如OFS(也使用双引号设置,因此需要像"一样转义。

getline; print $0负责CSV中通常包含列名的第一行。

然后,对于每一行,这段代码print $1+1,$2,$3将递增第一列,并打印第二列和第三列。

扩展第二个例子:

gawk  "BEGIN{ FS=OFS=","; getline; print $0 }{ print ($1<5?$1+1:$1),$2,$3 }" abc.csv

($1<5?$1+1:$1)将检查$1的值是否小于5($1<5(,如果为true,则返回$1+1,否则返回$1。或者,换句话说,如果当前值小于5,它只会加1。

有了你的数据,你最终会得到这样的东西(未经测试!(:

gawk  "BEGIN{ FS=OFS=","; getline; a=42; print $0 }{ if($4+0==0){ a++ }; print ($4<=0?$a:$1),$2,$3 }" input.csv
  • a=42为需要更新的列值设置初始值(您需要将其更改为正确的值(

  • 当第四列等于0时,if($4+0==0){ a++ }将增加a的值($4+0用于将空值(如""(转换为数值0(。

相关内容

最新更新