Ame*_*ina 11 sed awk csv files
我浏览了这个有用线程中的答案,但我的问题似乎不同到我想不出好的答案(至少与sed)。
我有一个大型 CSV 文件(200+ GB),其中的行如下所示:
<alphanumerical_identifier>,<number>
Run Code Online (Sandbox Code Playgroud)
where<alphanumerical_identifier>在整个文件中是唯一的。我想创建一个单独的文件,用索引替换第一列,即
<index>,<number>
Run Code Online (Sandbox Code Playgroud)
以便我们得到:
1, <number>
2, <number>
3, <number>
Run Code Online (Sandbox Code Playgroud)
可以awk在不将完整文件加载到内存中的情况下生成递增索引吗?
由于索引单调增加,因此删除索引可能会更好。解决方案会有所不同吗?,即:
<number>
<number>
<number>
Run Code Online (Sandbox Code Playgroud)
bis*_*hop 13
不在终端附近进行测试,但是经常被忽视的nl命令怎么样?就像是:
cut -f 2 -d , original.csv | nl -w 1 -p -s , > numbered.csv
这里有一些方法,但没有将接近的速度cut和nl解决方案上面:
awk
awk -F, '{$1=NR;print $1","$2;}' file.csv > newfile.csv
Run Code Online (Sandbox Code Playgroud)珀尔
perl -pe 's/[^,]+/$./' file.csv > newfile.csv
Run Code Online (Sandbox Code Playgroud)
或者
perl -F, -ane '$F[0]=$.; print join ",", @F' file.csv
Run Code Online (Sandbox Code Playgroud)Shell(但我不建议将它用于 200G 的文件,它会花费很长时间)
i=1; while IFS=, read foo num; do
printf "%d,%s\n" $((i++)) $num;
done < file.csv > newfile.csv
Run Code Online (Sandbox Code Playgroud)以上解决方案按速度排序。我在我的笔记本电脑和一个 40M 的文件上进行了测试,它们(平均 10 次运行)2.2282(awk)、2.4555(第一个 perl)、3.1825s(第二个 perl)和高达 48.6035s 的 shell。非常聪明cut和nl解决方案,您已经有大约在0.6078s快4倍。
| 归档时间: |
|
| 查看次数: |
857 次 |
| 最近记录: |