Vcf to csv linux

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

BoarderEB/vcf2csv

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

vcf2csv — convert vcf to csv file

The converter is based on VCard version 4 RFC6350 — but also works with version 3

python3 vcf2csv.py -p -i vards.vcf -o contacts.csv

-i = Specified the Infile like -i vards.vcf -o = Specified the Outfile like -o contacts.csv -e = Specified the Encoding of the files like -e "UTF-8" [default = UTF-8] -l = logs go to stdout -p = Add Photos to csv from vcf. --TelNoTyp = Telephone numbers are only converted as Tel0, Tel1, Tel2 and TelFax --MustHaveUid = If there no Uid don't write Vcard to csv-File 

Currently this data is being converted:

Name GivenNames AdditionalNames Prefixes Suffixes

Is Base64-Encodet-Img or a URL

PostOfficeBox PostOfficeBoxWork PostOfficeBoxHome
ExtendedAddress ExtendedAddressWork ExtendedAddressHome
Street StreetWork StreetHome
City CityWork CityHome
Region RegionWork RegionHome
PostalCode PostalCodeWork PostalCodeHome
Country CountryWork CountryHome
TelVoiceWork TelVoiceHome TelVoice0 TelVoice1 TelVoice2 TelVoice3
TelFaxWork TelFaxHome TelFax0 TelFax1 TelFax2 TelFax3
TelCellWork TelCellHome TelCell0 TelCell1 TelCell2 TelCell3
TelTextWork TelTextHome TelText0 TelText1 TelText2 TelText3
TelVideoHome TelVideoHome TelVideo0 TelVideo1 TelVideo2 TelVideo3
TelPagerWork TelPagerHome TelPager0 TelPager1 TelPager2 TelPager3
TelTextphoneWork TelTextphoneHome TelTextphone0 TelTextphone1 TelTextphone2 TelTextphone3

CSV-Header Option: —TelNoTyp:

If more than 3 Numbers, they are appended in Tel2

Читайте также:  Linux самый первый дистрибутив
EmailWork EmailWork EmailHome Email0 Email1 Email2 EmailPref

In the RFC each email address can have a preference. Only the Email with the heigest preference is linkt in the field «EmailPref»

Источник

nix script

На работе возникла задача привести в порядок адресную книгу E-Mail. Выгрузил в формате VCARD 3.0, понял, что проще застрелиться, чем пытаться вручную привести в порядок. Соответственно взялся за то, что под рукой. А под рукой всемогущий BASH. )))

Проблема усугублялась наличием большого количества абсолютных дублей адресов, так как адресную книгу слепил из трех книг от разных сотрудников. Но успокаивало то, что можно загнать всё в формат CSV, который открывается Экселем и LibreCalc, соответственно разгребать бардак можно не только мне.

Начнём с форматов.

VCF — формат VCARD 3.0.

Довольно простой текстовый формат, где данные поделены на отдельные строки и содержат в начале тег-описатель. Пример:

BEGIN:VCARD VERSION:3.0 UID:XXXXXXXXXXX EMAIL:email1@host.tld EMAIL:email2@host.tld EMAIL:email3@host.tld FN:Имя Получателя N:Подробная;Информация;5;Полей;Вроде бы END:VCARD

И каждый контакт описывается таким набором строк.

CSV

Простейший формат хранения таблиц и массивов. Строки содержат значения полей таблиц, разделённые каким-либо символом-разделителем. Чаще всего, символ разделитель — точка с запятой. Но так как в формате VCARD этот разделитель задействован для разделения полей подробной информации, я выбрал символ табуляции, что вполне допустимо.

Переходим к скриптам

И так, скрипт первый. vcf2csv. С комментариями, чтобы не просто скопипастить, а подумать, понять и применять:

#!/bin/bash # Делаем условие по ключу -2, которое # выдаст первой строкой заголовки таблиц. # Расчёт на то, чтобы можно было загнать # в один CSV несколько VCF. # В качестве разделителя полей выбрана табуляция. if [[ $2 == "-1" ]]; then echo "UID EMAIL FN N" | tr -d "\n"; fi # Теперь идёт конвейер. # * SED удаляет ненужное из строк и некоторые строки # * tr удаляет перевод строки и возврат # корретки # * SED вставляет перевод строки # в нужном месте, разделяя один контакт от # другого # * SED обрабатывает поле адреса e-mail # * SED всавляет разделителем адресов # точку с запятой # * . два раза, поскольку # адресов бывает три на один контакт # * sort сортирует всё таким образом, чтобы # одинаковые строки шли друг за другом # * uniq удаляет дубли, остовляя все строки в единственном экземпляре sed -e ' /BEGIN:VCARD/d s/VERSION:3.0/*/ s/UID:// s/EMAIL:/ EML:/ s/FN:/ / s/N:/ / /X-SOCIALPROFILE/d /BDAY/d /X-YA/d /END:VCARD/d' "$1" | tr -d "\r\n" | sed "y/*/\n/" | sed "s/ EML:/ /1" | sed "s/ EML:/;/" | sed "s/ EML:/;/" | sort | uniq

Вызов производится таким образом:.

vcf2csv vcards.vcf -1 >vcards.csv vcf2csv vcards1.vcf >>vcards.csv vcf2csv vcards2.vcf >>vcards.csv

В этом примере три файла карточек объединяются в один CSV. Заметьте, первый вызов скрипта идёт с ключом -1. Этот ключ обязательно должен быть вторым аргументом. Иначе не будет работать правильно. Можно доделать, додумать, создать защиту от дурака, но оставлю это вам. )))

Скрипт второй. csv2vcf. Он вернёт обработанные и открректированные контакты в VCF для загрузки в почтовый клиент.

#!/bin/bash # Получаем файл CSV первым аргументом и # грузим в переменную LIST=$(sed '1d' "$1") # Указываем разделителем перевод # строки, чтобы проедставить содержимое # переменной LIST как массив для обработки # в цикле. IFS=$" " # Начинаем цикл, обрабатывающий каждую # строку отдельно for ROW in $LIST do # Получаем первое поле, которое содержит UID U=$(echo "$ROW" | cut -d " " -f1) # Далее второе поле с адресами e-mail E=$(echo "$ROW" | cut -d " " -f2) # Теперь разделяем адреса на отдельные строки EML="$" # Получаем текст представления адресата F=$(echo "$ROW" | cut -d " " -f3) # И подробную информацию о контакте, # разделённую точкой с запятой N=$(echo "$ROW" | cut -d " " -f4) # Остаётся лишь выдать это в # правильном, для формата VCF виде echo -e "BEGIN:VCARD\r\nVERSION:3.0\r\nUID:$\r\nEMAIL:$\r\nFN:$\r\nN:$\r\nEND:VCARD" done

Вызов делается проще чем с первым скриптом:

csv2vcf vcards.csv >vcarsd-result.vcf

Вот и всё. Относительно просто, мы экономим от двух дней до недели ковыряния в адресной книге клиента. В моём случае, это веб-клиент Яндекса.

Читайте также:  Linux поменять имя файла

Статья написана в формате MarkDown и сконвертирована в HTML с помощью скрипта Parsedown.

Сервисы

Статьи

  • Bash-it
  • Отправка письма в терминале через Яндекс
  • Снапшот корня btrfs при обновлении системы
  • Настройка веб-сервера Caddy с PHP на чистом Termux
  • Выхлоп Chromium *chrome://gpu из TermuxArch
  • Работаем с файлами скачанными с Google Photo
  • Создаем свой дистрибутив Manjaro
  • Лечим нерабочие сочетания клавиш в mc
  • Отображение состояния смартфона (Android) на сайте
  • Доступ к компу из интернета без DDNS и покупки доменного имени
  • Оповещение о бекапах
  • Программирование языком автолюбителя
  • Подготовка поста в соц.сеть. Развитие.
  • SVG Введение. Структура файла.
  • SVG Простые фигуры
  • SVG Пути (линии Безье, кривые)
  • SVG Кроим код через bash
  • Синхронизация папок с помощью bash и rsync
  • TermuxArch установка
  • Конвертер VCARD (VCF 3.0) ⧎ CSV
  • watch-srv — Скрипт уведомлений о входе на сервер.
  • VNC на XFCE4
  • Ставим X на TermuxArch

Видео

Подсказки (Tips)

Контакты

хостинг

Новым клиентам скидка 25% на первый месяц по этой 👉 ссылке или по промокоду: 648148526

Источник

Vcf to csv linux

vcf2csv is a command line tool to convert vcard files to html or csv. Thus you may call it vcf2html also.
The input source is a regular file and the output is written to stdout.

The program is written in ANSI-C and should be compiled smoothly on most systems.

This project is under heavy development.

vcf2csv is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

vcf2csv is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with vcf2csv. If not, see .

Читайте также:  Посмотреть арп таблицу linux

The output is generated in two steps:

First, the whole input file is parsed to identify all used types in all vcards. A type is a data field like «CLASS», «EMAIL», «ADR;TYPE=home» and so on. Thus all used types do appear in the output.

Second, the file is parsed again: each particular vcard included in the file is read.
Once all values of this vcard are assinged to their corresponding type, it is written to stdout immediately.

While reading the values there may be done some conversions: as described in rfc2426 (2.6) a line «[. ] longer than 75 characters SHOULD be folded according to the folding procedure described in [MIME DIR].»
If a folded line is detected, the new line characted ‘\n’ is converted to the text value «\n».

If you want to ommit some types you can use a drop list. For example:
vcf2csv -d ‘ADR;,PHOTO;VERSION;’ -i vcards.vcf -w > output.html
This example ommits all types containing the string «ADR;», «PHOTO;» or «VERSION;» and creates a simple html file displaying your vcards in a table, each by a single row.

GPL v3 (or any later version).
You should have received a copy of the GNU General Public License along with vcf2csv. If not, see .

option description
-d LIST comma separated list of types to drop, e.g. -d ‘ADR;TYPE=,X-KPILOT,PHOTO;,LABEL;TYPE=work’
The contents of the list are handled case sensitive.
If a content of this list is a substring of a type, this type is dropped.
-h print help
-i input file (required)
-v print version
-w web output, create html instead of csv

The easiest way to use it for web output is to create an alias:

convert vcard.vcf to csv, write output to out.csv:

example csv output

Here you see a sample result:

convert vcard.vcf to html file out.html:

example html output

Here you see a sample result using vcf2csv.css (provided by package) for page formatting:

Use a drop list to strip TYPEs:
If you want to prevent some types to be converted, the are specified by a drop list. For example, a PHOTO uses a lot of space an should not apper in the resultig csv list. In this case use ‘-d’ to drop all types containing the string PHOTO:

The drop list is a comma separated list of values. It is handled case sensitive and may be a substring of the type to drop.

Let’s take a look for a more complex example:
you want to drop all types containing the substring x-, all photos and all addresses of the type home.
A vcard stores this information in these types:

X-KADDRESSBOOK-X-IMAddress:www.somepage.com
X-KADDRESSBOOK-X-SpousesName:somename
ADR;TYPE=home:some;private;;address;information
PHOTO;ENCODING=b;TYPE=image/jpeg:/9j/4AAQSkZJRgABAQIAA.

All you have to know are the strings in front of the colon.
Here you see a command line to generate a simple web page and drop these types:

Источник

Оцените статью
Adblock
detector