File1.txt
item1 carA
item2 carB
item3 carC
item4 platD
item5 carE
File2.txt
carA platA
carB platB
carC platC
carE platE
Sortie souhaitée:
item1 platA
item2 platB
item3 platC
item4 platD
item5 platE
Comment puis-je le faire?
command-line
text-processing
awk
pawana
la source
la source
Je sais que tu as dit
awk
, mais il y a unejoin
commande à cet effet ...Ce serait suffisant avec la première
join
commande s'il n'y avait pas cette ligne:La commande dit essentiellement: jointure basée sur la deuxième colonne du premier fichier (
-1 2
) et la première colonne du deuxième fichier (-2 1
), et affiche la première colonne du premier fichier et la deuxième colonne du deuxième fichier (-o 1.1,2.2
). Cela ne montre que les lignes appariées. La deuxième commande join indique presque la même chose, mais elle indique d'afficher les lignes du premier fichier qui n'ont pas pu être jumelées (-v 1
), et de sortir la première colonne du premier fichier et la deuxième colonne du premier fichier (-o 1.1,1.2
). Ensuite, nous trions la sortie des deux combinés.sort -k 1
signifie trier en fonction de la première colonne etsort -k 2
signifie trier en fonction de la seconde. Il est important de trier les fichiers en fonction de la colonne de jointure avant de les transmettrejoin
.Maintenant, j'ai écrit le tri deux fois, parce que je n'aime pas joncher mes répertoires de fichiers si je peux l'aider. Cependant, comme l'a dit David Foerster, selon la taille des fichiers, vous souhaiterez peut-être trier les fichiers et les enregistrer d'abord pour ne pas avoir à attendre de les trier deux fois. Pour donner une idée des tailles, voici le temps qu'il faut pour trier 1 million et 10 millions de lignes sur mon ordinateur:
Cela représente 1,5 seconde pour 1 million de lignes et 19 secondes pour 10 millions de lignes.
la source
%E
format horaire) est moins intéressant pour mesurer les performances de calcul. Le temps CPU en mode utilisateur (%U
ou simplement uneTIMEFORMAT
variable non définie ) serait beaucoup plus significatif.%U
.