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?
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?
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:
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
signification du paramètre
-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.
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.
Utilisez 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()
}
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:
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:
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.
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.
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.