我有一个具有以下结构的CSV文件:
31126000283424431;32285076389;t;text text;1;3;;1;1;0.9;0.81;0;0;1;1;1;2013-11-21;;NL
31126000279521531;32308233749;c;text text;1;2;;1;9;2.79;7.78;0;0;4;16;9;2013-11-21;;NL
31126000279406931;32291254349;c;text text;1;5;;1;3;0.98;0.96;0;0;3;9;0;2013-11-21;;NL
31126000272138431;32284912829;c;text text;1;3;;1;1;0;0;0;0;3;9;0;2013-11-21;;NL
31126000271468431;32304086789;t;text text;1;5;;1;1;0.2;0.04;0;0;2;4;1;2013-11-21;;NL
31126000269838731;29269530509;c;text text;1;1;;1;1;0.45;0.2;0;0;3;9;0;2013-11-21;;NL
我需要将第六个分号后的数字替换为0。
因此输出文件如下所示:
31126000283424431;32285076389;t;text text;1;0;;1;1;0.9;0.81;0;0;1;1;1;2013-11-21;;NL
31126000279521531;32308233749;c;text text;1;0;;1;9;2.79;7.78;0;0;4;16;9;2013-11-21;;NL
31126000279406931;32291254349;c;text text;1;0;;1;3;0.98;0.96;0;0;3;9;0;2013-11-21;;NL
31126000272138431;32284912829;c;text text;1;0;;1;1;0;0;0;0;3;9;0;2013-11-21;;NL
31126000271468431;32304086789;t;text text;1;0;;1;1;0.2;0.04;0;0;2;4;1;2013-11-21;;NL
31126000269838731;29269530509;c;text text;1;0;;1;1;0.45;0.2;0;0;3;9;0;2013-11-21;;NL
我一直在尝试awk,sed和cut,但是我无法让它工作。
谢谢
答案 0 :(得分:7)
您的示例显示第6个col,但是在 5th 半。
之后awk -F';' -v OFS=';' '$6=0;7' file
尝试上面的一行
答案 1 :(得分:1)
sed "s/;[^;]\{1,\}/;0/5" YourFile.csv
假设colum中总有一些东西
sed "s/;[^;]*/;0/5" YourFile.csv
即使没有数字也是第6列
答案 2 :(得分:0)
如果你的机器上有php,你可以使用这个非常方便的CSV Paser class。它会将您的CSV转换为2D数组,您可以使用foreach循环从中循环并更改数据。
$csvFile
foreach($csvFile as $value){
foreach($value as $k => $v){
if($k == 5){ $v = 0}
}
}
这会将其自动化为任何大小相同格式的CSV文件。
答案 3 :(得分:0)
perl -MText::CSV_XS -e'$csv=Text::CSV_XS->new({sep_char=>";", eol=>"\n"}); while($row=$csv->getline(ARGV)) {$row->[5]=0;$csv->print(STDOUT, $row)}'
用作过滤器或输入文件作为参数。您应该使用适当的CSV解析器进行任何认真的工作。