将索引列添加到CSV文件

时间:2015-05-29 13:05:08

标签: bash csv

我有一个大的逗号分隔文件(6GB),并希望为其添加一个索引列。我正在研究Unix类型的解决方案以提高效率。我正在使用Mac。

我有这个:

V1  V2  V3
0.4625  0.9179  0.8384
0.9324  0.2486  0.1114 
0.6691  0.7813  0.6705
0.1935  0.3303  0.4336

想得到这个:

ID  V1  V2  V3
1   0.4625  0.9179  0.8384
2   0.9324  0.2486  0.1114
3   0.6691  0.7813  0.6705
4   0.1935  0.3303  0.4336

4 个答案:

答案 0 :(得分:12)

这可能会奏效:

awk -F'\t' -v OFS='\t' '
  NR == 1 {print "ID", $0; next}
  {print (NR-1), $0}
' input.csv > output.csv

awk中,NR变量是“到目前为止看到的输入记录总数”,通常表示“当前行号”。因此,第一行中的NR == 1是我们匹配第一条记录并添加“ID”列标题的方式,而对于其余的行,我们使用NR-1作为索引。

-F'\t'参数设置输入字段分隔符,-vOFS='\t'设置输出字段分隔符。

答案 1 :(得分:4)

我假设您有逗号分隔文件。

使用vim,打开文件。在正常模式下,键入

:%s/^/\=line('.').','/

:%s/^/\=line('.')/在行的开头添加行号。由于您有逗号分隔文件(添加列),因此在行号后需要逗号。所以.','

有关:%s/^/\=line('.')/

的完整说明,请参阅this answer

答案 2 :(得分:3)

由于原帖中没有指定技术,我很高兴保持简单。

(所有花哨的Vim / bash解决方案都可以,如果您知道自己在做什么)

  • 在您喜欢的电子表格程序中打开CSV文件(我正在使用 LibreOffice,但Excel或本机Mac等价物都可以)
  • 在A列的左侧插入一列
  • 在单元格A2中输入1,即标题
  • 下的第一个单元格
  • 双击单元格右下角的blob,如屏幕截图所示:

LibreOffice wizardry

最后一步将使用1,2,3...等填充索引列。 然后,您可以再次将生成的电子表格另存为CSV文件。

答案 3 :(得分:0)

  1. 在您喜欢的电子表格程序(例如Excel)中打开CSV文件
  2. 在第一列的左侧插入一列
  3. 在此列的第一个单元格中输入1
  4. 在以下单元格中输入方程式' = A2 + 1 '

enter image description here

  1. 双击单元格右下角的blob,如屏幕截图所示

enter image description here