fusionner ou joindre deux tables de rapide ligne de commande linux
Disons que j'ai deux relativement gros fichiers délimités par des tabulations file1.txt, file2.txt.
file1.txt
id\tcity\tcar\ttype\tmodel
file2.txt
id\tname\trating
Supposons que l'file1.txt a 2000 id unique, et par conséquent 2000 lignes uniques, et file2.txt a seulement 1000 lignes uniques, et donc 1000 identifiants uniques. Est-il un moyen de fusionner les deux tableaux?
Cas 1. les fusionner en les identifiant dans file1.txt, où, quand il n'y a pas d'identité en file2.txt NAs serait rempli.
Case2. les fusionner en les identifiant dans file2.txt, où, quand seulement les id dans file2.txt seront imprimées avec les champs de file1.txt et file2.txt.
Remarque: la fusion de nouveaux fichiers de fichier délimité par des tabulations, avec un fichier d'en-tête.
Note2. J'aimerais aussi connaître vos suggestions sur la façon de le faire quand il n'y a pas d'en-tête.
Merci!
stackoverflow.com/questions/5467690/... ou stackoverflow.com/questions/6393333/... ou à d'autres personnes "Liées" barre latérale peut être pertinent
par fusion je veux rejoindre
merci beaucoup, ça ressemble à une très bonne solution mais rejoindre exige que les fichiers doivent être triés, et le awk ne serait pas ajouter NAs quand il n'y a pas de données. Connaissez-vous une solution qui permettrait d'ajouter NAs et de garder les onglets?
OriginalL'auteur Dnaiel | 2012-11-09
Vous devez vous connecter pour publier un commentaire.
Votre "cas 2" approche standard, les outils unix. Bien sûr, si les fichiers sont triés, vous pouvez supprimer le tri.
Si vous avez inclus les en-têtes, vous pourrait compter sur l'id de l'être numérique pour le tri, la rejoint en-tête vers le haut:
Avec
file1.txt
file2.txt
de sortie:
PS Pour préserver l'ONGLET caractère séparateur, passer le
-t
option:C'est un peu difficile à voir sur de SORTE que ' contenait un caractère de TABULATION. Type avec ^VTAB (par exemple, en bash)
OriginalL'auteur sehe
Cela a fonctionné pour moi dans le cas 1:
join -t $'\t' -1 1 -2 1 -a 1 -a 2 <(sort fileone.txt) <(sort filetwo.txt) | sort -n -t $'\t' > filethree.txt
alors:
awk '{if(NF+0<7) printf "%s\tNA\tNA\n", $0; else print $0}' filethree.txt
OriginalL'auteur AWE
Essayez de faire cela :
Ce script rejoindre sur id (premier col).
oh encore une mise en garde (3) pour une raison étrange, la sortie n'a pas été délimités par des tabulations entre les colonnes 1 et 2.
perl -v C'est du perl, v5.8.8 construit pour x86_64-linux-thread-multi
hahahaha juste essayé la dernière version mais j'ai toujours le même problème (1)-(3) vous ne savez pas pourquoi, tout à fait bizarre.
aussi, comment pourrais-je ajouter délimités par des tabulations NAs quand il n'y a pas de données? est-il possible? J'ai encore fonctionner dans la mise en garde de l'en-tête en bas, et en quelque sorte il n'y a pas d'onglet dans entre le dernier col de fichier 1 et fichier 2, et comme je l'ai dit pas de NAs... merci, désolé de vous déranger.
OriginalL'auteur Gilles Quenot