удалять ';' в конце каждой строки - PullRequest
0 голосов
/ 03 марта 2011

У меня огромный (10+ ГБ) файл .csv на сервере Linux.Строки выглядят примерно так:

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>
  2. удалить последнюю точку с запятой в каждой строке

У меня есть особые проблемы со второй, потому что скрипт не должен возражать, если это файл Linux или файл Windows.

Я пытался сделать это с помощью sed, но пока не получилось.

[править]

Я наконец-то использовал смесь решений Денниса Уильямса и SiegeX:

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

(часть с s /; [[: blank:]] * $ // не работала с моим файлом ...)

Ответы [ 4 ]

3 голосов
/ 03 марта 2011
sed 's/;\([0-9]*\),\([0-9]*\);/;\1.\2;/g;s/;[[:blank:]]*$//' ./infile
3 голосов
/ 03 марта 2011
$ 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 голосов
/ 03 марта 2011

Попробуйте:

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

Чтобы сохранить возврат каретки, если он там есть:

sed 's/,/./g;s/;\(\r\?\)$/\1/' inputfile
1 голос
/ 03 марта 2011

Если вам удобно использовать perl, вы можете использовать perl one liner для выполнения этих задач. Вот пример того, как вы можете изменить номер:

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

будьте очень осторожны с опцией -i, так как она заставляет perl работать с существующим файлом на месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...