Как использовать команду «Cut», чтобы вырезать поля в файле CSV, когда поля содержат COMMAS?

Вы можете указать apt-get установить определенную версию пакета. Для вашего примера:

apt-get install subversion

вы добавите версию к имени пакета, например,

apt-get install subversion=1.9.2-1

Чтобы найти версию пакета, на странице вики Debian RollbackUpdate показан пример, где эта информация находится в

http://www.debian.org/distrib/packages, то есть,
https://www.debian.org/distrib/packages#search_packages

или (более старые версии) через

http://snapshot.debian.org/
http://snapshot.debian.org/package/subversion/

показывает
http://snapshot.debian.org/package/subversion/1.9.2-2/
http://snapshot.debian.org/package/subversion/1.9.2-1/
http://snapshot.debian.org/package/subversion/1.9.1-1/

и так далее.

Наконец, страница Debian показывает (для примера), что нужно изменить в /etc/apt/preferences, чтобы подключить пакет.

2
29.06.2018, 00:26
2 ответа

Команда cut разграничивает только один символ за раз. Таким образом, вы можете преобразовать кавычки и запятые в другой односимвольный разделитель, используя sed и регулярное выражение. Например:

sed -e 's/","\|",\|,"\|,,/@/g' /path/to/file | cut -d@ -f2

Вернется

hopper

Другой способ — использовать AWK. Например, следующее даст вам 2-е поле.

awk -F ',,|^"|","|",|,"|"$' '{print $3}' /path/to/file

вернется

hopper

Приведенные выше примеры не идеальны, поскольку они не обрабатывают правильно все случаи с несколькими пустыми полями и внешними кавычками. Лучше всего использовать язык сценариев более высокого уровня с модулем синтаксического анализа CSV.

2
27.01.2020, 21:55

Формат CSV имеет достаточно пограничных случаев, поэтому вам не нужно заново изобретать его синтаксический анализ. Используйте правильный парсер CSV. Например, с рубином

ruby -rcsv -e 'CSV.foreach(ARGV.shift) {|row| puts row[1]}' file
4
27.01.2020, 21:55

Теги

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