Supposons que vous ayez un fichier CSV avec 2 champs: ID et email. Vous avez un autre fichier avec 2 champs: email et nom. Comment pouvez-vous produire un fichier avec les trois champs joints par e-mail?
Un peu plus de détails sur la jointure (c'est-à-dire intérieure, extérieure, gauche). La liste de diffusion sur le 1er CSV est-elle identique à la deuxième liste? Ou en contient-on plus?
hyperslug
Des exemples de fichiers csv seraient utiles, avec le système d'exploitation que vous utilisez?
Troggy
je pense que la 1ère et la 2ème liste sont identiques. J'utilise Linux. Aidez-moi !!! Merci!! :)
crst53
1
quelle est la taille des données?
Joshua
Réponses:
24
Révision3 :
Vous devez trier les deux listes par e-mail par ordre alphabétique, puis rejoindre. Étant donné que le champ email le 2ème champ du fichier1 et le 1er champ du fichier2:
-t,: ',' est le séparateur de champ
-k 2,2: tri des caractères sur le 2ème champ
-k 1,1: tri des caractères sur le 1er champ
-1 2: fichier 1, 2ème champ
-2 1: fichier 2, 1er champ
>: sortie dans un fichier
produit
email, ID, nom
email, ID, nom
...
triés par e-mail par ordre alphabétique.
Notez que si un e-mail manque dans l'un ou l'autre des fichiers, il sera omis des résultats.
CSV est plus compliqué que cela. Le séparateur de champ peut être échappé par exemple.
pguardiario
@hyperslug puis-je faire une jointure externe complète?
Abu Shoeb
Cela ne fonctionnera pas si le CSV est mélangé entre guillemets / non cotés, si l'ID contient une virgule. Utilisez cette solution uniquement pour un traitement unique où vous vérifiez le résultat. Mais je recommande de ne pas l'utiliser pour un script de niveau production.
outil génial. Même reconnu, que l'un de mes fichiers a un délimiteur différent de ",".
D_K
6
C'est peut-être exagéré, mais vous pouvez importer dans une base de données (par exemple OpenOffice Base) sous deux types de tables et définir un rapport qui est la sortie souhaitée.
Si l'importation CSV pose problème, un tableur (par exemple OpenOffice Calc) peut effectuer l'importation. Le résultat peut ensuite être facilement transféré dans la base de données.
Comme référence future, vous voudrez peut-être commencer à jouer avec AWK . C'est un petit langage de script très simple qui existe sous une forme quelconque sur chaque système * nix et sa seule mission est la vie est la manipulation de bases de données textuelles délimitées standard. Avec quelques lignes de script jetable, vous pouvez faire des choses très utiles. Le langage est petit et élégant et a un meilleur rapport utilité / complexité que tout ce que je connais.
awk ne gère pas les citations et les échappements (par exemple, traiter les s dans un fichier CSV séparé) pour autant que je sache. Si vous en avez besoin, l'utilisation d'une bibliothèque de gestion CSV dédiée est plus facile; ils existent pour de nombreuses langues.
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()
}
Il prend les fichiers CSV en tant que tables SQL, puis autorise les requêtes SQL, résultant en un autre fichier CSV ou JSON.
Pour votre cas, vous appelez simplement:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
L'outil nécessite Java 8 ou une version ultérieure.
Quelques avantages:
Vous obtenez vraiment le support CSV, pas seulement "supposons que les données soient correctes".
Vous pouvez rejoindre sur plusieurs clés.
Plus facile à utiliser et à comprendre que les joinsolutions basées sur.
Vous pouvez combiner plus de 2 fichiers CSV.
Vous pouvez joindre par des expressions SQL - les valeurs ne doivent pas nécessairement être les mêmes.
Avertissement: j'ai écrit cet outil. Il était en déroute après la fermeture de Google Code, mais je l'ai réactivé et ajouté de nouvelles fonctionnalités au fur et à mesure que je l'utilise.
L'extension de fichier xlsx implique Microsoft Excel et je pense que VLOOKUP le fait aussi. Cette question est balisée avec Linux. Microsoft Excel est-il disponible pour Linux?
Vous pouvez également utiliser un outil spécialement conçu pour joindre des fichiers csv, tel que celui trouvé sur https://filerefinery.com
Les opérations que nous prenons en charge actuellement sont les suivantes: Joindre des fichiers csv. Il est possible d'effectuer l'équivalent SQL des opérations de jointure externe, interne, gauche et droite sur deux fichiers csv. La colonne qui sera utilisée comme clé de jointure dans chacun des fichiers est configurable.
Veuillez citer les parties essentielles de la réponse à partir du ou des liens de référence, car la réponse peut devenir invalide si la ou les pages liées changent.
Réponses:
Révision3 :
Vous devez trier les deux listes par e-mail par ordre alphabétique, puis rejoindre. Étant donné que le champ email le 2ème champ du fichier1 et le 1er champ du fichier2:
signification du paramètre
produit
triés par e-mail par ordre alphabétique.
Notez que si un e-mail manque dans l'un ou l'autre des fichiers, il sera omis des résultats.
la source
Utilisez csvkit :
ou
la source
C'est peut-être exagéré, mais vous pouvez importer dans une base de données (par exemple OpenOffice Base) sous deux types de tables et définir un rapport qui est la sortie souhaitée.
Si l'importation CSV pose problème, un tableur (par exemple OpenOffice Calc) peut effectuer l'importation. Le résultat peut ensuite être facilement transféré dans la base de données.
la source
Comme référence future, vous voudrez peut-être commencer à jouer avec AWK . C'est un petit langage de script très simple qui existe sous une forme quelconque sur chaque système * nix et sa seule mission est la vie est la manipulation de bases de données textuelles délimitées standard. Avec quelques lignes de script jetable, vous pouvez faire des choses très utiles. Le langage est petit et élégant et a un meilleur rapport utilité / complexité que tout ce que je connais.
la source
Utilisez Go: https://github.com/chrislusf/gleam
la source
Essayez CSV Cruncher .
Il prend les fichiers CSV en tant que tables SQL, puis autorise les requêtes SQL, résultant en un autre fichier CSV ou JSON.
Pour votre cas, vous appelez simplement:
L'outil nécessite Java 8 ou une version ultérieure.
Quelques avantages:
join
solutions basées sur.Avertissement: j'ai écrit cet outil. Il était en déroute après la fermeture de Google Code, mais je l'ai réactivé et ajouté de nouvelles fonctionnalités au fur et à mesure que je l'utilise.
la source
Vous pouvez lire le fichier CSV avec un tableur comme LibreOffice et utiliser une
VLOOKUP()
macro pour rechercher le nom dans le deuxième fichier.la source
Vous pouvez également utiliser un outil spécialement conçu pour joindre des fichiers csv, tel que celui trouvé sur https://filerefinery.com
la source