Припустимо, у вас є один файл CSV з 2 полями: ідентифікатор та електронна пошта. У вас є ще один файл з 2 полями: електронна пошта та ім’я. Як можна створити файл із усіма трьома полями, приєднаними до електронної пошти?
Припустимо, у вас є один файл CSV з 2 полями: ідентифікатор та електронна пошта. У вас є ще один файл з 2 полями: електронна пошта та ім’я. Як можна створити файл із усіма трьома полями, приєднаними до електронної пошти?
Відповіді:
Версія3 :
Ви повинні сортувати обидва списки по електронній пошті за алфавітом, а потім приєднатись. Враховуючи, що поле електронної пошти 2-е поле file1 та 1-е поле file2:
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-е поле >: вихід у файл
виробляє
електронна адреса, ідентифікатор, ім’я електронна адреса, ідентифікатор, ім’я ...
відсортовано за електронною поштою за алфавітом.
Зауважте, що якщо в будь-якому файлі відсутній якийсь електронний лист, він буде опущений з результатів.
Можливо, це надмірно, але ви можете імпортувати в базу даних (наприклад, 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, але я відновив його та додав нові функції під час його використання.
Ви можете прочитати файл CSV за допомогою програми електронних таблиць на зразок LibreOffice і використовувати VLOOKUP()
макрос для пошуку імені у другому файлі.
Ви також можете скористатися інструментом, спеціально розробленим для приєднання файлів CSV, наприклад, знайденим на https://filerefinery.com
Зараз ми підтримуємо такі операції: приєднання файлів CSV. Можна виконати еквівалент SQL зовнішніх, внутрішніх, лівих та правих операцій з'єднання на двох файлах csv. Котрий стовпець буде використовуватися як ключ з'єднання у кожному з файлів, який можна налаштувати.