删除';' 在每行的结尾

我在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;

我正在寻找一个快速的脚本来做到以下几点:

  1. <number>,<number>出现的<number>,<number>更改为<number>.<number>
  2. 删除每行的最后一个分号

我对第二个问题有特别的问题,因为脚本不应该介意它是Linux文件还是Windows文件。

我试图用sed做到这一点,但迄今为止失败了。

[编辑]

我终于使用了Dennis Williams和SiegeX解决scheme的组合:

 sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;\(\r\?\)$/\1/' inputfile 

(带有s /; [[:blank:]] * $ //的部分在我的文件中不起作用…)

 sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;[[:blank:]]*$//' ./infile 
 $ 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为你处理不同的行结尾。

试试这个:

 sed 's/,/./g;s/;\r\?$//' inputfile 

如果有回车,请保留回车:

 sed 's/,/./g;s/;\(\r\?\)$/\1/' inputfile 

如果你用perl方便,你可以用一个perl来做这些事情。 以下是您可以进行号码更改的示例:

  perl -i -pe 's/(\d),(\d)/$1\.$2/' yourfile 

对-i选项非常小心,因为它会导致perl在现有的文件上运行。