comparer deux colonnes et imprime la 2e colonne du 2e fichier

J’ai besoin de comparer les deux premières colonnes de deux fichiers, si les résultats sont égaux au besoin d’imprimer la 2ème colonne du 1er fichier en 2ème fichier pour tous les matches du 1er fichier.

Consortingbutions:

cat sample.txt 135,135-00 135,135-13 135,135-134 235,120-23 235,190-56 cat dump_test.csv 135,121,4,VA,date,date 135,128,6,VA,date,date 135,131,9,VA,date,date 235,128,10,date,date 

Fichier de sortie:

 cat output.txt 135,121,4,VA,date,date,135-00 135,128,6,VA,date,date,135-00 135,131,9,VA,date,date,135-00 135,121,4,VA,date,date,135-13 135,128,6,VA,date,date,135-13 135,131,9,VA,date,date,135-13 135,121,4,VA,date,date,135-134 135,128,6,VA,date,date,135-134 135,131,9,VA,date,date,135-134 235,128,10,date,date,120-23 235,128,10,date,date,190-56 

 $ awk -F, 'BEGIN{i=0}FNR==NR{first[i]=$0; i=i+1;}NR!=FNR{for(j=0;j 

Ce qu'il fait?

En bref

crée d' first un tableau à partir de chaque ligne du premier fichier, sample.txt

pour chaque ligne du second fichier dumb_test elle vérifie si le premier champ est en premier, si oui ajoute la deuxième colonne en premier avec la ligne et imprime.

Longue

FNR==NR garantit que la commande suivante ne fonctionne que pour le premier fichier, sample.txt

first est un tableau, qui enregistre chaque ligne dans le fichier un, sample.txt et est indexé en utilisant i

first[i]=$0 copie la ligne entière dans le tableau et incrémente l'index i

NR!=FNR garantit que la commande suivante est exécutée pour le deuxième fichier dumb_test.csv

le itère d'abord à travers le tableau, c'est-à-dire des lignes dans le premier fichier.

split(first[j],line) le first[i] dans la line du tableau

par exemple, quand first[0] = 135,135-00

split(first[0], line) rend la line[1] = 135 et line[2] = 135-00 ici la line[1] est la colonne un et la line[2] est la colonne deux du premier fichier

le if vérifie la line[1] == $1 qui est la première colonne du fichier un. sample.txt est égal à la première colonne du deuxième fichier dumb_test.csv

Si oui, imprime la ligne entière dans le second fichier, $0 apposé avec la deuxième colonne du premier fichier, ligne [2]

print $0,line[2]

Est-ce que ça va pour toi?

 join -t',' test sample 

sortie:

 135,121,4,VA,date,date,135-00 135,121,4,VA,date,date,135-13 135,121,4,VA,date,date,135-134 135,128,6,VA,date,date,135-00 135,128,6,VA,date,date,135-13 135,128,6,VA,date,date,135-134 135,131,9,VA,date,date,135-00 135,131,9,VA,date,date,135-13 135,131,9,VA,date,date,135-134 235,128,10,date,date,120-23 235,128,10,date,date,190-56