ack --passthru --color string file
для Ubuntu и Debian, используйте ack-grep вместо ack
ack-grep --passthru --color string file
Можно использовать Python csv
модуль.
Простой пример:
import csv
reader = csv.reader(open("test.csv", "r"))
for row in reader:
for col in row:
print col
Или, Вы могли попробовать некоторое awk волшебство. Howewer, я не хороший awk пользователь и не могу подтвердить, что это работало бы правильно, и как сделать это.
R не является моим любимым языком программирования, но это хорошо для вещей как это. Если Ваш файл CSV
***********
foo.csv
***********
col1, col2, col3
"this, is the first entry", this is the second, 34.5
'some more', "messed up", stuff
В типе интерпретатора R
> x=read.csv("foo.csv", header=FALSE)
> x
col1 col2 col3
1 this, is the first entry this is the second 34.5
2 'some more' messed up stuff
> x[1] # first col
col1
1 this, is the first entry
2 'some more'
> x[1,] # first row
col1 col2 col3
1 this, is the first entry this is the second 34.5
Относительно Ваших других запросов для "способности выбрать столбцы на основе имен столбцов, данных в первой строке", посмотрите
> x["col1"]
col1
1 this, is the first entry
2 'some more'
Для "поддержки других стилей заключения в кавычки" посмотрите quote
аргумент read.csv (и связанные функции). Для "поддержки разделенных от вкладки файлов" посмотрите sep
аргумент read.csv (набор sep
к '\t').
Для получения дополнительной информации посмотрите справку онлайн.
> help(read.csv)
Rscript
(часть основы R распределение) или дополнительный пакет littler
. Можно сделать #!/usr/bin/env Rscript
или подобный. проверка
– Faheem Mitha
07.04.2011, 21:21
Я нашел csvfix, инструмент командной строки делает задание хорошо. Необходимо будет сделать его сами однако:
http://neilb.bitbucket.org/csvfix
Это делает все вещи, которые Вы ожидали бы, столбцы порядка/выбора, разделение/слияние, и многие Вы не хотели бы генерировать SQL, вставляет от данных CSV и diffing данных CSV.
Походит на задание для Perl с Text::CSV
.
perl -MText::CSV -pe '
BEGIN {$csv = Text::CSV->new();}
$csv->parse($_) or die;
@fields = $csv->fields();
print @fields[1,3];
'
См. документацию для того, как обработать имена столбцов. Разделитель и заключающий стиль в кавычки может быть настроен с параметрами на new
.См. также Text::CSV::Separator
для предположения разделителя.
(t)csh
та команда работала бы просто великолепно при подсказке Вашей оболочки. Вы можете всегда присоединяться к тем строкам вместе, если Вы хотите это на одной строке. новая строка обычно точно так же, как пространство в синтаксисе жемчуга как в C.
– Stéphane Chazelas
12.09.2017, 15:07
-e
создает неявный цикл).
– Sridhar Sarnobat
13.09.2017, 01:33
Взгляните также на GNU Recutils и инструменты давки.
(с помощью http://www.reddit.com/r/commandline/comments/mfcu9/anyone_using_gnu_recutils_is_it_outdatedsuperceded/)
Я, наверное, немного опоздал, но есть стоит упомянуть еще один инструмент: csvkit
http://csvkit.readthedocs.org/
Он имеет множество инструментов командной строки, которые могут:
cut
, grep
, sort
и другие, но с поддержкой CSV, Решение для awk
awk -vq='"' '
func csv2del(n) {
for(i=n; i<=c; i++)
{if(i%2 == 1) gsub(/,/, OFS, a[i])
else a[i] = (q a[i] q)
out = (out) ? out a[i] : a[i]}
return out}
{c=split($0, a, q); out=X;
if(a[1]) $0=csv2del(1)
else $0=csv2del(2)}1' OFS='|' file
Для использования питона из командной строки можно посмотреть pythonpy (https://github.com/Russell91/pythonpy):
$ echo $'a,b,c\nd,e,f' | py '[x[1] for x in csv.reader(sys.stdin)']
b
e
попробуйте "csvtool" этот пакет это удобная утилита командной строки для работы с CSV-файлами
.cissy также будет выполнять обработку csv в командной строке. Он написан на языке C (маленький/легкий) и имеет rpm и deb пакеты, доступные для большинства дистрибутивов.
Используя пример:
echo '"this, is the first entry", this is the second, 34.5' | cissy -c 1
"this, is the first entry"
или
echo '"this, is the first entry", this is the second, 34.5' | cissy -c 2
this is the second
или
echo '"this, is the first entry", this is the second, 34.5' | cissy -c 2-
this is the second, 34.5
Если вы хотите использовать командную строку (и не создавать целую программу для выполнения этой работы), вы хотели бы использовать rows , проект, над которым я работаю: это интерфейс командной строки для табличных данных, а также библиотеку Python для использования в ваших программах.С помощью интерфейса командной строки вы можете распечатать любые данные в CSV, XLS, XLSX, HTML или любом другом табличном формате, поддерживаемом библиотекой, с помощью простой команды:
rows print myfile.csv
Если myfile.csv
похож на это:
state,city,inhabitants,area
RJ,Angra dos Reis,169511,825.09
RJ,Aperibé,10213,94.64
RJ,Araruama,112008,638.02
RJ,Areal,11423,110.92
RJ,Armação dos Búzios,27560,70.28
Тогда rows распечатают содержимое красивым способом, например:
+-------+-------------------------------+-------------+---------+
| state | city | inhabitants | area |
+-------+-------------------------------+-------------+---------+
| RJ | Angra dos Reis | 169511 | 825.09 |
| RJ | Aperibé | 10213 | 94.64 |
| RJ | Araruama | 112008 | 638.02 |
| RJ | Areal | 11423 | 110.92 |
| RJ | Armação dos Búzios | 27560 | 70.28 |
+-------+-------------------------------+-------------+---------+
Если вы разработчик Python и уже установили pip
на ваш компьютер, просто запустите его внутри virtualenv или с sudo
:
pip install rows
Если вы используете Debian:
sudo apt-get install rows
Вы можете конвертировать между любым поддерживаемым форматом:
rows convert myfile.xlsx myfile.csv
Да, вы можете использовать SQL в файле CSV:
$ rows query 'SELECT city, area FROM table1 WHERE inhabitants > 100000' myfile.csv
+----------------+--------+
| city | area |
+----------------+--------+
| Angra dos Reis | 825.09 |
| Araruama | 638.02 |
+----------------+--------+
Преобразование вывода запроса в файл вместо стандартного вывода также возможно с помощью параметра - output
.
Вы тоже можете использовать свои программы на Python:
import rows
table = rows.import_from_csv('myfile.csv')
rows.export_to_txt(table, 'myfile.txt')
# `myfile.txt` will have same content as `rows print` output
Надеюсь, вам понравится!
Miller — еще один удобный инструмент для манипулирования данными на основе имен -, включая CSV (с заголовками ). Чтобы извлечь первый столбец CSV-файла, не заботясь о его имени, вы должны сделать что-то вроде
printf '"first,column",second,third\n1,2,3\n' |
mlr --csv --implicit-csv-header --headerless-csv-output cut -f 1
Репозиторий github Инструменты структурированного текста содержит полезный список соответствующих инструментов командной строки Linux. В частности, в разделе Значения, разделенные разделителями , перечислены несколько инструментов с поддержкой CSV, которые непосредственно поддерживают запрошенные операции.
Одним из лучших инструментов является Миллер . Это похоже на awk, sed, cut, join и sort для индексированных данных по имени -, таких как CSV, TSV и табличный JSON.
В примере
echo '"this, is the first entry", this is the second, 34.5' | \
mlr --icsv --implicit-csv-header cat
дает вам
1=this, is the first entry,2= this is the second,3= 34.5
Если вам нужен TSV
echo '"this, is the first entry", this is the second, 34.5' | \
mlr --c2t --implicit-csv-header cat
дает вам (возможность удалить заголовок)
1 2 3
this, is the first entry this is the second 34.5
Если вам нужен первый и третий столбец, измените их порядок
echo '"this, is the first entry", this is the second, 34.5' | \
mlr --csv --implicit-csv-header --headerless-csv-output cut -o -f 3,1
дает вам
34.5,"this, is the first entry"
Если вам нужен визуальный/интерактивный инструмент в терминале, я искренне рекомендую VisiData.
Он имеет таблицы частот (, показанные выше ), сводную таблицу, плавление, диаграммы рассеяния, фильтрацию/вычисления с использованием Python и многое другое.
Вы можете передавать CSV-файлы следующим образом
vd hello.csv
Существуют специальные параметры CSV :--csv-dialect
, --csv-delimiter
, --csv-quotechar
и --csv-skipinitialspace
для точной -настройки обработки CSV-файлов.
Я бы порекомендовал xsv , «быстрый набор инструментов командной строки CSV, написанный на Rust».
Написано автором Ripgrep .
Показан вКак мы ускорили обработку CSV в 142 раза(Тема на Reddit).