Дополнительно
Как извлечь один столбец CSV-файла
Если у меня есть CSV-файл, есть быстрый Баш способ, чтобы распечатать содержимое только одного столбца? Можно с уверенностью предположить, что каждая строка имеет одинаковое количество столбцов, а каждый столбец'содержание С бы разной длины.
95
16
Вы можете использовать awk, для этого. Изменение '$2' к N-му столбцу, который вы хотите.
да. кошка mycsv.КШМ | вырезать -д ',' -Ф3 будет печатать 3-й столбец.
Самый простой способ я был в состоянии сделать это, чтобы просто использовать csvtool. У меня были другие случаи использования, а также для использования csvtool и он может обрабатывать кавычки или разделители надлежащим образом, если они появляются в себе данные колонки.
Замена 2 с номером столбца будет эффективно извлечь данные столбца, который вы ищете.
Приземлился здесь хотите извлечь из вкладки отдельный файл. Думал, я хотел бы добавить.
Где-Ф2` извлекает 2, ненулевой столбец индексируется, или второй колонке.
Многие ответы на эти вопросы являются большими, и некоторые из них даже заглянул в случаях. Я хотел бы добавить простой ответ, который можно ежедневно использовать... где вы в основном в тех случаях, углу (как вырвавшись запятую или запятые в кавычках и т. д.).
Так с помощью ключевых слов begin (выполнить до ввода), мы можем установить в этом поле все, что мы хотим...
Приведенный выше код будет печатать 3-й столбец в CSV-файл.
Других ответов хорошо работать, но раз уж ты спросил для решения с помощью оболочки Bash, вы можете сделать это:
А затем вы можете вытащить столбцы (первый в данном примере) следующим образом:
Так что там'ы несколько вещей происходит здесь:
при КСФ=,` - это высказывание используют запятую в качестве КСФ (внутренний разделитель полей), что Shell использует, чтобы знать то, что отделяет полей (текстовых блоков). Так сказать КСФ=, все равно что сказать "А,Б" это же как "Б" и будет, если КСФ=" не то " (что это по умолчанию.)
читай-csv_line;
- это значит читать в каждой строке по одному, и создать массив, где каждый элемент получил название "csv_line" и отправить, что в "делать" в разделе нашего цикла whileделать Эхо "${csv_line[0]}" и;сделать < файл - теперь мы'вновь в "делать" и этап, и мы'вновь говорю, что эхо на 0-ой элемент массива "и csv_line-то". Это действие повторяется на каждой строке файла. В `< файл является просто говорю, а цикл, в котором, чтобы прочитать от. Примечание: помните, что в bash, массивы с 0 проиндексированных, так что первая колонка-это элемент 0-й.
Настолько там Вы имеете его, вытащив колонки из CSV в оболочке. Другие решения, возможно, более практичный, но это чисто Баш.
Вы могли бы использовать GNU awk и, см. [Эта статья руководство пользователя][1]. В качестве улучшения к решению, представленные в статье (в июне 2015), следующую команду поглазеть позволяет двойные кавычки внутри двойных кавычках полей; двойная кавычка отмечены две подряд двойные кавычки (" и" В) нет. Кроме того, это позволяет пустые поля, но даже этого не может обрабатывать многострочные поля. Следующий пример печатает 3-й столбец (через
с=3
) из текстового файла.КШМ:[тупой@один ПТС]$ кот > файл #сначала мы'Лл создать базовый файл CSV А,B,С,D,Е,F,г,H,я,к 1,2,3,4,5,6,7,8,9,10 А,B,С,D,Е,F,г,H,я,к 1,2,3,4,5,6,7,8,9,10
[тупой@один оч]$ awk и -Ф '{печати $1}' файл а 1 а 1
Мне нужен правильный CSV-файл парсинга, а не
резать
/в awk
и молитве. Я'м пытаясь это на Mac без csvtool, но маки приходят с Рубином, так что вы можете сделать:где 2-это столбец вас интересует
вы также можете сделать
чтобы сделать несколько столбцов
Я думаю, самый простой это с помощью csvkit:
Получает 2-й столбец:
csvcut -C файл 2.КШМ
Однако, там's также csvtool, и, вероятно, ряд других КШМ Баш инструменты там:
судо apt-получить установку csvtool
(для Debian-based систем)Это возвращает столбец с первой строки, имеющие 'ид' в это.
csvtool namedcol идентификатор csv_file.КШМ
Это было возвращение четвертой строке:
csvtool коль 4 csv_file.КШМ
Если вы хотите удалить строку заголовка:
csvtool коль 4 csv_file.КШМ | СЭД '1д'
Вы можете'т сделать это без полного парсер CSV-файл.
Мне интересно, почему ни один из ответов до сих пор упоминали csvkit.
csvkit документации
Я использую его исключительно для управления КШМ данных и до сих пор я не нашел проблему, что я не мог решить, используя cvskit.
Чтобы извлечь один или более столбцов из файла CVS, можно использовать csvcut` утилита, которая является частью набора. Для извлечения второго столбца используйте эту команду:
ссылка на страницу csvcut
Если строки в CSV указаны, добавьте кавычки с
Q
, то вариант:Установить с пункт Установить csvkit " или " судо АПТ установить csvkit`.
Вот пример csv-файл с 2 столбцами
Чтобы получить первый столбец, используйте:
F стоит на поле и D обозначает разделитель
Выполнения приведенной выше команды будет производить следующий результат.
Выход
Чтобы получить только 2-й столбец:
И вот результат Выход
Другой вариант использования:
Ваш входной файл CSV содержит 10 столбцов, и вы хотите, чтобы столбцы с 2 по 5 и 8 столбцов, используя запятую в качестве разделителя и".
(смысл "в полях&я вырезал использует -Ф;), чтобы указать столбцы и-D (в смысле на "Ограничитель") смотрите, чтобы указать разделитель. Вам необходимо указать последний, потому что некоторые файлы могут содержать пробелы, табуляции или точкой с запятой для разделения столбцов.
распил-командной и вот еще несколько примеров:
Вы также можете использовать цикл while
Использую этот код для некоторое время, это не на "быстрые" и если не считать, что "резать и вставлять из StackOverflow и".
Он использует ${##} и ${%%} операторы в цикле вместо "Если". Он требует 'подстраховаться' и 'умирать', и поддерживает только запятая, тире, и трубу сентября чаров (что's все мне нужно).
Пример: