Предположим, у вас есть один файл CSV с 2 полями: идентификатор и адрес электронной почты. У вас есть другой файл с 2 полями: адрес электронной почты и имя. Как вы можете создать файл со всеми тремя полями, объединенными по электронной почте?
Предположим, у вас есть один файл CSV с 2 полями: идентификатор и адрес электронной почты. У вас есть другой файл с 2 полями: адрес электронной почты и имя. Как вы можете создать файл со всеми тремя полями, объединенными по электронной почте?
Ответы:
Редакция 3 :
Вы должны отсортировать оба списка по электронной почте в алфавитном порядке, а затем присоединиться. Учитывая, что в поле электронной почты 2-е поле файла1 и 1-е поле файла2:
sort -t , -k 2,2 file1.csv > sort1.csv
sort -t , -k 1,1 file2.csv > sort2.csv
join -t , -1 2 -2 1 sort1.csv sort2.csv > sort3.csv
значение параметра
-t,: ',' - разделитель полей -k 2,2: сортировка символов во 2-м поле -k 1,1: сортировка символов на 1-м поле -1 2: файл 1, 2-е поле -2 1: файл 2, 1-е поле >: вывод в файл
производит
электронная почта, ID, имя электронная почта, ID, имя ...
отсортировано по электронной почте в алфавитном порядке.
Обратите внимание, что если в каком-либо файле отсутствует какое-либо письмо, оно будет опущено в результатах.
Возможно, это излишне, но вы можете импортировать в базу данных (например, OpenOffice Base) в виде двух видов таблиц и определить отчет, который является желаемым результатом.
Если импорт CSV является проблемой, то программа для работы с электронными таблицами (например, OpenOffice Calc) может выполнить импорт. Результат может быть легко перенесен в базу данных.
В будущем вы можете начать играть с AWK . Это очень простой маленький скриптовый язык, который существует в той или иной форме в каждой системе * nix, и его единственная миссия - жизнь - это манипуляции со стандартными текстовыми базами данных с разделителями. С помощью нескольких строк одноразового скрипта вы можете делать очень полезные вещи. Язык небольшой и элегантный и имеет лучшее соотношение полезности и сложности, чем все, что я знаю.
Используйте Go: https://github.com/chrislusf/gleam
package main
import (
"flag"
"os"
"github.com/chrislusf/gleam"
"github.com/chrislusf/gleam/source/csv"
)
var (
aFile = flag.String("a", "a.csv", "first csv file with 2 fields, the first one being the key")
bFile = flag.String("b", "b.csv", "second csv file with 2 fields, the first one being the key")
)
func main() {
flag.Parse()
f := gleam.New()
a := f.Input(csv.New(*aFile))
b := f.Input(csv.New(*bFile))
a.Join(b).Fprintf(os.Stdout, "%s,%s,%s\n").Run()
}
Попробуйте CSV Cruncher .
Он принимает файлы CSV в качестве таблиц SQL, а затем разрешает запросы SQL, в результате чего получается другой файл CSV или JSON.
Для вашего случая вы просто позвоните:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
Инструменту нужна Java 8 или более поздняя версия.
Некоторые из преимуществ:
join
решения на основе.Отказ от ответственности: я написал этот инструмент. Раньше он был в замешательстве после закрытия Google Code, но я восстановил его и добавил новые функции по мере его использования.
Вы можете прочитать файл CSV с помощью программы для работы с электронными таблицами, такой как LibreOffice, и использовать VLOOKUP()
макрос для поиска имени во втором файле.
Вы также можете использовать инструмент, специально разработанный для объединения CSV-файлов, такой как найденный на https://filerefinery.com.
В настоящее время мы поддерживаем следующие операции: Присоединение CSV-файлов. Можно выполнить SQL-эквивалент внешних, внутренних, левых и правых операций соединения для двух файлов CSV. Какой столбец будет использоваться в качестве ключа объединения в каждом из файлов, настраивается.