удаление «_» из очень большого CSV-файла

У меня есть большой CSV-файл (120 ГБ), который выглядит следующим образом:

"JE",865438083645,2012-12-05T23:07:36.000Z,24,"NQ",142,"658_55525",475035504705
"JE",875619112765,2012-12-05T23:58:04.000Z,4,"PG",144,"219_9221",835399289335
"JE",125495251245,2012-12-05T18:16:06.000Z,206,"PLJE",153,"763_60771",445355650435

Я хотел бы удалить подчеркивание и кавычки из значений в седьмом столбце (например, "658_55525" становится 65855525). Инструмент импорта для базы данных, которую я использую, не позволяет приводить или манипулировать файлом при импорте.

Какой эффективный способ сделать это из командной строки?

1
задан 14 June 2015 в 16:54

3 ответа

Я не знаю об эффективном, но sed с регулярным выражением. Сделайте резервное копирование файла в случае, если Вы делаете опечатку, но возможно что-то вроде этого:

sed -i  's/"\([0-9]\+\)_\([0-9]\+\)"/\1\2/' bigcsvfile.csv

Редактирование: удаленный g, как Кос, на который указывают, не необходим никакой g.

0
ответ дан 14 June 2015 в 16:54

Так как Ваш файл является большим, я предложил бы использовать gawk > 4.10.0 вместо awk, который поддерживает оперативное редактирование.

Используя gawk > 4.10.0:

gawk -i inplace 'BEGIN {FS=","; OFS=","}; {gsub(/["_]/,"",$7); print}' inputfile
  • -i inplace: говорит gawk отредактировать оперативный файл

awk разбивка сценария:

  • BEGIN {FS=","; OFS=","}: устанавливает разделителя полей и выходного разделителя полей к ,
  • gsub(/["_]/,"",$7): замены " и _ символы содержатся в 7-м поле записи с пустой строкой
  • print: печатает запись
1
ответ дан 14 June 2015 в 16:54

Perl является просто самым быстрым при редактировании больших файлов.

perl -pi.bak -e 's/"([0-9]+)_([0-9]+)"/$1$2/' your_file.csv

Ваш файл резервной копии находится в

your_file.csv.bak

Без резервного копирования:

perl -pi -e 's/"([0-9]+)_([0-9]+)"/$1$2/' your_file.csv
0
ответ дан 14 June 2015 в 16:54

Другие вопросы по тегам:

Похожие вопросы: