Suponha que você tenha um arquivo CSV com 2 campos: ID e email. Você tem outro arquivo com 2 campos: email e nome. Como você pode produzir um arquivo com todos os três campos unidos por email?
Suponha que você tenha um arquivo CSV com 2 campos: ID e email. Você tem outro arquivo com 2 campos: email e nome. Como você pode produzir um arquivo com todos os três campos unidos por email?
Respostas:
Revisão3 :
Você deve classificar as duas listas por email em ordem alfabética e depois participar. Dado que o campo de email, o 2º campo do arquivo1 e o 1º campo do arquivo2:
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
significado do parâmetro
-t,: ',' é o separador de campos -k 2,2: ordenação de caracteres no 2º campo -k 1,1: ordenação de caracteres no 1º campo -1 2: arquivo 1, segundo campo -2 1: arquivo 2, primeiro campo >: saída para o arquivo
produz
email, ID, nome email, ID, nome ...
classificados por email em ordem alfabética.
Observe que, se algum email estiver faltando em qualquer arquivo, ele será omitido nos resultados.
Use o csvkit :
csvjoin -c email id_email.csv email_name.csv
ou
csvjoin -c 2,1 id_email.csv email_name.csv
Talvez seja um exagero, mas você pode importar para um banco de dados (por exemplo, OpenOffice Base) como dois tipos de tabelas e definir um relatório com a saída desejada.
Se a importação de CSV for um problema, um programa de planilha (por exemplo, OpenOffice Calc) poderá fazer a importação. O resultado pode ser facilmente transferido para o banco de dados.
Como referência futura, você pode querer começar a brincar com o AWK . É uma pequena linguagem de script muito simples que existe de alguma forma em todos os sistemas * nix e sua única missão é a vida é a manipulação de bancos de dados textuais delimitados padrão. Com algumas linhas de script descartável, você pode fazer algumas coisas muito úteis. O idioma é pequeno e elegante e possui uma melhor relação utilidade / complexidade do que qualquer outra coisa que eu conheça.
Use 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()
}
Experimente o CSV Cruncher .
Ele usa arquivos CSV como tabelas SQL e, em seguida, permite consultas SQL, resultando em outro arquivo CSV ou JSON.
Para o seu caso, basta ligar para:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
A ferramenta precisa do Java 8 ou posterior.
Algumas das vantagens:
join
soluções do que as baseadas.Disclaimer: Eu escrevi essa ferramenta. Costumava estar desarrumado após o fechamento do Google Code, mas eu o revivei e adicionei novos recursos à medida que o uso.
Você pode ler o arquivo CSV com um programa de planilha como o LibreOffice e usar VLOOKUP()
macro para procurar o nome no segundo arquivo.
Você também pode usar uma ferramenta projetada especificamente para ingressar em arquivos csv, como a encontrada em https://filerefinery.com
As operações atualmente suportadas são: Juntando arquivos csv. É possível executar o equivalente em SQL das operações de junção externa, interna, esquerda e direita em dois arquivos csv. Qual coluna será usada como uma chave de junção em cada um dos arquivos é configurável.