Всегда можно было просто превратить его в массив 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) '
cut -d "," -f 4 --complement input.csv > output.csv
Здесь за -d
следует разделитель, т.е. точка с запятой -двоеточие(;
)в двойных кавычках, а за -f
следует номер удаляемого столбца, т.е. 4. Номера столбцов начинаются с 1 и продолжайте в этом контексте.
Опция --complement
указывает дополнение выбора. (Эта опция позволяет команде cut
отображать все байты/символы или поля , кроме выбранных байтов)
В этом сценарии дополнением операции cut
являются все столбцы, ограниченные символом ,
, за исключением 4-го столбца.
Очень общее решение для удаления количества последних символов:
awk '{print substr($0, 1, length($0)-5)}' list1.txt
1,"data",100.00
2,"code",91.8
3,"analytics",100.00
-5
номер символа будет удален
Я предлагаю использовать 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
Надеюсь, это поможет.
В дополнение к специфическому для 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
Я не уверен, как эти два сравниваются с Миллером, но мне нравится, как синтаксис выглядит короче/понятнее.