Tengo dos archivos csv.

Archivo 1

ID,Name,Gender,Salary,DOB
11,Jim,M,200,90
12,David,M,100,89
12,David,M,300,89
13,Lucy,F,150,86
14,Lily,F,200,85
13,Lucy,F,100,86

Archivo 2

DOB,Name,Children
90,Jim,2
88,Michael,4
88,Lily,1
85,Lily,0

Lo que quiero hacer es dejar la combinación externa del Archivo 2 en el Archivo 1 según la fecha de nacimiento y el Nombre, manteniendo el orden de las observaciones del Archivo 1. Entonces se espera que la salida sea

ID,Name,Gender,Salary,DOB,Children
11,Jim,M,200,90,2
12,David,M,100,89,
12,David,M,300,89,
13,Lucy,F,150,86,
14,Lily,F,200,85,0
13,Lucy,F,100,86,

Aprendí que necesitamos ordenar los datos si usamos el comando join. Entonces me preguntaba si podría usar awk para hacer mi trabajo. Pero soy nuevo con awk. hay alguien que pueda ayudarme? Por cierto, si los datos son muy grandes, ¿puedo soltar el comando print en awk pero simplemente usar > *.csv para guardarlo en un nuevo archivo csv? Es porque encontré soluciones a algunas preguntas relacionadas en este sitio web de uso frecuente {print ...}. Gracias.

0
Samson 1 oct. 2019 a las 16:36

1 respuesta

La mejor respuesta

¡awk al rescate!

$ awk -F, 'NR==FNR{a[$1,$2]=$3; next} {print $0 FS a[$NF,$2]}' file2 file1

ID,Name,Gender,Salary,DOB,Children
11,Jim,M,200,90,2
12,David,M,100,89,
12,David,M,300,89,
13,Lucy,F,150,86,
14,Lily,F,200,85,0
13,Lucy,F,100,86,

join requerirá una entrada ordenada y necesita adornos para recuperar el orden inicial. Puede redirigir la salida a un archivo agregando > outputfile.csv

1
karakfa 1 oct. 2019 a las 14:42