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