我在Linux服务器上有一个巨大的(10+ GB).csv文件。这些线看起来像这样:
6;20000327;20000425;990099,0;20000327;LL;UBXO;7;-1;62;F;30;001;NO;NO;wgB;0;99;0002;5530;001;708;196;1;AA;N;N;100;53,81;0;0;0;1;1;;1; 6;20000327;20000425;990099,0;20000425;LL;OLD*;62;62;92;F;30;001;NO;NO;ueB;0;99;0002;XXXX;001;;;1;AA;N;N;;;0;0;1;0;0;;30;
我正在搜索快速脚本来执行以下操作:
<number>,<number>
的所有出现更改为<number>.<number>
我对第二个问题特别有问题,因为脚本不应该介意它是Linux文件还是Windows文件。
我尝试用sed做到但到目前为止失败了。
[编辑]
我最终使用了Dennis Williams和SiegeX解决方案的混合物:
sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\(\r\?\)$/\1/' inputfile
(带有s /; [[:blank:]] * $ //的部分在我的文件中无效...)
答案 0 :(得分:3)
sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;[[:blank:]]*$//' ./infile
答案 1 :(得分:3)
$ cat file
6;20000327;20000425;990099,0;20000327;LL;UBXO;7;-1;62;F;30;001;NO;NO;wgB;0;99;0002;5530;001;708;196;1;AA;N;N;100;53,81;0;0;0;1;1;;1;
6;20000327;20000425;990099,0;20000425;LL;OLD*;62;62;92;F;30;001;NO;NO;ueB;0;99;0002;XXXX;001;;;1;AA;N;N;;;0;0;1;0;0;;30;
$ perl -p -e 's/(\d+),(\d+)/\1.\2/g; s/;$//' file
6;20000327;20000425;990099.0;20000327;LL;UBXO;7;-1;62;F;30;001;NO;NO;wgB;0;99;0002;5530;001;708;196;1;AA;N;N;100;53.81;0;0;0;1;1;;1
6;20000327;20000425;990099.0;20000425;LL;OLD*;62;62;92;F;30;001;NO;NO;ueB;0;99;0002;XXXX;001;;;1;AA;N;N;;;0;0;1;0;0;;30
注意:perl会为您处理不同的行结尾。
答案 2 :(得分:2)
尝试一下:
sed 's/,/./g;s/;\r\?$//' inputfile
如果在那里保留回车:
sed 's/,/./g;s/;\(\r\?\)$/\1/' inputfile
答案 3 :(得分:1)
如果您使用perl很方便,那么您可以使用perl one liner来执行这些操作。以下是您可以进行数字更改的示例:
perl -i -pe 's/(\d),(\d)/$1\.$2/' yourfile
要非常小心-i选项,因为它会导致perl对现有文件进行操作。