Удаление столбцов из CSV файла

Всегда можно было просто превратить его в массив JSON:

#!/usr/bin/env perl
use strict;
use warnings;

use JSON;

chomp ( my @data = <DATA> ); 
print to_json ( \@data );

__DATA__
string1
string2
string3
string12312

Или как однострочник:

perl -MJSON -e 'print to_json ( [map{s/\n//gr}<>] )'

Канал на stdin или указать имя файла (например, grep / awk и т. д.)

Оба вывода (последний при загрузке вашего примера):

["string1","string2","string3","string12312"]

Можно отформатировать его как «красивый» JSON с помощью print to_json (\ @data, {pretty => 1}) , который добавит перевод строки и отступ.

(этот лайнер выше основан на более новом perl, который вы могли установили. Если это не сработает: perl -MJSON -e 'chomp (@a = <>) ; print to_json (\ @a) '

5
19.10.2016, 09:32
4 ответа
cut -d "," -f 4 --complement input.csv > output.csv

Здесь за -dследует разделитель, т.е. точка с запятой -двоеточие(;)в двойных кавычках, а за -fследует номер удаляемого столбца, т.е. 4. Номера столбцов начинаются с 1 и продолжайте в этом контексте.

Опция --complementуказывает дополнение выбора. (Эта опция позволяет команде cutотображать все байты/символы или поля , кроме выбранных байтов)

В этом сценарии дополнением операции cutявляются все столбцы, ограниченные символом ,, за исключением 4-го столбца.

1
27.01.2020, 20:31

Очень общее решение для удаления количества последних символов:

awk '{print substr($0, 1, length($0)-5)}' list1.txt
1,"data",100.00
2,"code",91.8
3,"analytics",100.00

-5номер символа будет удален

0
27.01.2020, 20:31

Я предлагаю использовать miller(AKAmlr). Miller — это небольшая (< 1 МБ )программа, написанная на C (без зависимостей )для обработки табличных данных в различных форматах (, например, TSV, CSV, табличный JSON, ключ -пары значений )в потоковом режиме. Он доступен в репозиториях большинства дистрибутивов Linux (, обычно под именем miller). Его синтаксический анализатор CSV обрабатывает многострочные -ячейки (, т. е. ячейки со встроенными символами новой строки ). Хотя он предполагает файлы CSV с заголовками, он имеет параметры(--implicit-csv-headerи --headerless-csv-output), которые обрабатывают заголовки -без файлов CSV. Для вашего случая использования -, если вы хотите удалить четвертый столбец (, индексация столбца начинается с 1 ),вы можете сделать что-то вроде

mlr --csv --implicit-csv-header --headerless-csv-output cut -x -f 4 input.csv > output.csv

Если вы хотите удалить последний столбец, не считая их, вы можете перевернуть каждую строку CSV перед обработкой данных и revвставить их снова после этого, например:

< input.csv rev |
mlr --csv --implicit-csv-header --headerless-csv-output cut -x -f 1 |
rev > output.csv

Надеюсь, это поможет.

7
09.07.2020, 13:59

В дополнение к специфическому для CSV -пользовательскому коду на Python, Perl или чем-то еще существуют проекты, такие как miller , ориентированные на обработку CSV/TSV в командной строке.

Существует проект Python,csvkit , цель которого состоит в том, чтобы предложить некоторые специфические для CSV -варианты общих инструментов CL, таких как cut и grep . Этот проект также вдохновилна создание GoCSV , целью которого является повышение скорости и эффективности использования памяти.

Они оба имеют урезанный-синтаксис для указания столбцов/полей с диапазонами, например:

% csvcut -c 1-3 input.csv 
1,data,100.00
2,code,91.8
3,analytics,100.00
% gocsv select -c 1-3 input.csv 
1,data,100.00
2,code,91.8
3,analytics,100.00

Я не уверен, как эти два сравниваются с Миллером, но мне нравится, как синтаксис выглядит короче/понятнее.

2
24.05.2021, 04:17

Теги

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