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?
Um pouco mais de detalhes sobre a junção (interna, externa, esquerda). A lista de e-mails no 1º CSV é idêntica à segunda lista? Ou um contém mais?
hyperslug
Exemplos de arquivos csv seriam úteis, juntamente com o sistema operacional que você está usando?
Troggy 20/08/09
Eu acho que a primeira e a segunda lista são idênticas. Eu estou usando Linux. Por favor ajude!!! obrigado!! :)
crst53 21/08/09
1
qual o tamanho dos dados?
21609 Joshua
Respostas:
24
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:
-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.
O CSV é mais complicado que isso. O separador de campos pode ser escapado, por exemplo.
Pguardiario
@hyperslug posso fazer junção externa completa?
Abu Shoeb
Isso não funcionará se o CSV estiver misturado entre aspas / não, se o ID contiver uma vírgula. Use esta solução apenas para processamento único, em que você verifica o resultado. Mas eu recomendo não usá-lo para um script em nível de produção.
ferramenta incrível. Mesmo reconhecido, que um dos meus arquivos tem um delimitador diferente de ",".
D_K
6
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.
O awk não lida com citações e escapes (por exemplo, lidar com s em um arquivo CSV separado) até onde eu sei. Se você precisar, é mais fácil usar uma biblioteca dedicada de manipulação de CSV; eles existem para muitos idiomas.
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()
}
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:
Você realmente recebe suporte para CSV, e não apenas "vamos supor que os dados estejam corretos".
Você pode participar de várias chaves.
Mais fácil de usar e entender as joinsoluções do que as baseadas.
Você pode combinar mais de 2 arquivos CSV.
Você pode ingressar nas expressões SQL - os valores não precisam ser os mesmos.
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.
A extensão do arquivo xlsx implica o Microsoft Excel e acho que o VLOOKUP também. Esta questão está identificada com Linux. O Microsoft Excel está disponível para Linux?
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.
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:
significado do parâmetro
produz
classificados por email em ordem alfabética.
Observe que, se algum email estiver faltando em qualquer arquivo, ele será omitido nos resultados.
fonte
Use o csvkit :
ou
fonte
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.
fonte
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.
fonte
Use Go: https://github.com/chrislusf/gleam
fonte
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:
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.
fonte
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.fonte
Você também pode usar uma ferramenta projetada especificamente para ingressar em arquivos csv, como a encontrada em https://filerefinery.com
fonte