CSV-файл обработки текста, усечение цифр без округления - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть CSV-файл с 1000 строк и 75 столбцов.Столбцы имеют разные типы данных.Я хотел бы получить доступ к некоторым столбцам (ex cols 46, 47 и усечь до 6 цифр после десятичной дроби без округления) и некоторым столбцам (ex col 6 урезать до 2 цифр после десятичной дроби).Кроме того, сохраните старый файл вместе с новыми изменениями как файл .csv.

Вот некоторые фиктивные данные (1 строка, 6 столбцов).Первая строка состоит из имен столбцов.

col1, col2, col3, col4, col5, col6

id_1,41.76149291933553, -70.06372272425352, United States, "[,]", 0.1333534322353434

Проблема - некоторые столбцы содержат строку "[,]".Я знаю, используя awk, мы можем получить доступ к таким столбцам, как 46, 47 долларов.Но разделитель полей (запятая) также является частью приведенной выше строки, поэтому я не уверен, как получить правильные столбцы

1 Ответ

0 голосов
/ 14 февраля 2019

начиная с

col1,col2,col3,col4,col5,col6
id_1,41.76149291933553,-70.06372272425352,United States,"[, ]",0.1333534322353434

с Миллером (http://johnkerl.org/miller/doc/index.html) вы можете запустить

mlr --csv --fs "," cut -f col3,col4,col6 \
then put -S '$col3=gsub($col3,"(\.)([0-9]{3})([0-9]*)","\1\2");$col6=gsub($col6,"(\.)([0-9]{5})([0-9]*)","\1\2")' input

, чтобы иметь

col3,col4,col6
-70.063,United States,0.13335

Используя cutВы извлекаете только столбцы col3, col4, col6.

И, используя, например, $col3=gsub($col3,"(\.)([0-9]{3})([0-9]*)","\1\2"), вы усекаете $col3 до 3 чисел. Вместо col6 усекается до 5.

...