У меня есть набор файлов csv (около 250), каждый из которых имеет от 300 до 500 записей. Мне нужно вырезать 2 или 3 столбца из каждого файла и хранить его на другом. Я использую ОС ubuntu. Есть ли способ сделать это в команде или утилите?
Как вырезать столбцы csv
Ответ 1
Если вы знаете, что разделитель столбцов не встречается внутри полей, вы можете использовать cut.
$ cat in.csv
foo,bar,baz
qux,quux,quuux
$ cut -d, -f2,3 < in.csv
bar,baz
quux,quuux
Вы можете использовать оболочку buildin 'for' для перебора всех входных файлов.
Ответ 2
Если поля могут содержать разделитель, вы должны найти библиотеку, которая может анализировать файлы CSV. Как правило, языки сценариев общего назначения будут включать в себя CSV-модуль в их стандартной библиотеке.
Ruby: require 'csv'
Python: import csv
Perl: use Text::ParseWords;
Ответ 3
Если ваши поля содержат запятые или символы новой строки, вы можете использовать вспомогательную программу, которую я написал, чтобы разрезать (и другие инструменты обработки текста UNIX) правильную работу с данными.
https://github.com/dbro/csvquote
Эта программа находит специальные символы внутри указанных полей и временно заменяет их непечатаемыми символами, которые не будут путать программу вырезания. Затем они восстанавливаются после завершения разреза.
Решениеlutz:
csvquote in.csv | cut -d, -f2,3 | csvquote -u
Ответ 4
Если вы использовали ssconvert
для получения CSV, вы можете попробовать:
ssconvert -O 'separator="|"' "file.xls" "file.txt"
Обратите внимание на расширение TXT вместо CSV, таким образом будет использоваться Gnumeric_stf: stf_assistant exporter вместо Gnumeric_stf: stf_csv, что позволяет использовать параметры (параметр -O
). В противном случае вы получите файл. Хранитель файла не принимает ошибки параметров. Характер трубы намного менее вероятен, но вы можете проверить его раньше.
Затем вы можете переименовать его и сделать следующее:
cat file.csv | cut -d "|" -f3 | sort | uniq -c | sort -rn | head
- Другие варианты:
-O 'eol=unix separator=; format=preserve charset=UTF-8 locale=en_US transliterate-mode=transliterate quoting-mode=never'
. - Решение с AWK v4 +.
-
ssconvert
справочная страница.