web-dev-qa-db-fra.com

awk - comparer 2 colonnes de 2 fichiers et imprimer des lignes communes

Je sais que les mêmes questions ont déjà été traitées sur cette plate-forme, mais j’ai essayé toutes les solutions pendant plusieurs heures et je ne trouve pas mon erreur. Donc, j'apprécierais tout conseil ou aide pour ce que je fais mal.

Comme ici https://unix.stackexchange.com/questions/216511/comparing-the-first-column-of-two-files-and-printing-the-entire-row-of -the-secon et ici comment puis-je comparer des données dans 2 fichiers pour identifier des données communes et uniques? Deux fichiers dont je préfère filtrer les lignes du fichier 2 qui correspondent à la colonne 1 du fichier 1. À mon avis, la solution proposée pour les mêmes questions devrait fonctionner, mais malheureusement, elle ne fonctionne pas. Mes fichiers sont séparés par des tabulations.

fichier_1.txt

Apple
great
see
tree

fichier_2.txt

Apple    5.21      Noun
around   6.21      Adverb
great    2         Adjective
bee      1         Noun
see      7.43      Verb
tree     3         Noun

La sortie devrait ressembler à:

Apple    5.21      Noun
great    2         Adjective
see      7.43      Verb
tree     3         Noun

J'ai essayé comm -12,

awk (e.g awk 'NR==FNR{a[$1];next} ($1 in a)' file_1.txt file_2.txt > output.txt)

Je sais que c'est peut-être une question stupide, je m'excuse d'avance. Cependant, je ne semble pas être en mesure de le comprendre.

1
dani_anyman

Une façon de le faire serait la suivante:

awk '   BEGIN { while ((getline <"file2.txt") > 0) {REC[$1]=$0}}
    {print REC[$1]}' <file1.txt

La ligne de lecture au début lit file2.txt et le stocke dans un tableau REC, indexé par le premier enregistrement.

La section "principale" du code lit ensuite le contenu de file1.txt et utilise simplement le premier mot de la ligne pour rechercher la ligne appropriée dans file2.txt, désormais stockée dans REC.

Exemple de sortie:

Apple    5.21      Noun
great    2         Adjective
see      7.43      Verb
tree     3         Noun 
3
Nick Sillito