gpt4 book ai didi

linux - 更改终端中 CSV 的值

转载 作者:太空狗 更新时间:2023-10-29 12:13:01 25 4
gpt4 key购买 nike

我有一个包含 500.000 多行的巨大 csv 文件。我想通过 Ubuntu 中的终端向“价格”列添加一个金额。我尝试使用 awk(最佳解决方案?),但我不知道如何使用。 (我还需要在新文件中保留标题)

文件示例

"Productno.";"Description";"Price";"Stock";"Brand"
"/5PL0006";"Drum Unit";"379,29";"10";"Kyocera"
"00096103";"Main pcb HUK, OP6w";"882,00";"0";"OKI"
"000J";"Drum, 7033/7040 200.000";"4306,00";"0";"Minolta"

例如,我想在价格上加 125,所以输出是:

"Productno.";"Description";"Price";"Stock";"Brand"
"/5PL0006";"Drum Unit";"504,29";"10";"Kyocera"
"00096103";"Main pcb HUK, OP6w";"1007,00";"0";"OKI"
"000J";"Drum, 7033/7040 200.000";"4431,00";"0";"Minolta"

最佳答案

$ awk 'BEGIN {FS=OFS="\";\""} NR>1 {$3 = sprintf("%.2f", $3+125)}1' p.txt 
"Productno.";"Description";"Price";"Stock";"Brand"
"/5PL0006";"Drum Unit";"504,29";"10";"Kyocera"
"00096103";"Main pcb HUK, OP6w";"1007,00";"0";"OKI"
"000J";"Drum, 7033/7040 200.000";"4431,00";"0";"Minolta"

请注意,这需要环境变量 LC_NUMERIC 的值,该值需要 , 作为小数点分隔符(我将我的设置为 LC_NUMERIC="de_DE",例如)。

为了更加干燥,您可以使用 -v 传递您想要添加的数量:

$ awk -v n=125 'BEGIN {FS=OFS="\";\""} NR>1 {$3 = sprintf("%.2f", $3+n)}1' p.txt

如果你不太关心格式(也就是说,如果 "4431" 而不是 "4431,00" 是可以接受的),你可以跳过sprintf:

$ awk -v n=125 'BEGIN {FS=OFS="\";\""} NR>1 {$3+=n}1' p.txt  

编辑:在BEGIN block 中设置FSOFS,而不是通过-v 独立设置,如评论中所建议的(为了更好地确保它们获得相同的值,因为它们相同很重要)。

关于linux - 更改终端中 CSV 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35222540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com