Cat 2 files y evitar la duplicación de líneas

Tengo el file1 con el siguiente contenido

{"name":"clio5", "value":"13"} {"name":"citroen_c4", "value":"23"} {"name":"citroen_c3", "value":"12"} {"name":"golf4", "value":"16"} {"name":"golf3", "value":"8"} 

Y tengo el file2 con el siguiente contenido

 {"name":"clio5", "value":"14"} {"name":"citroen_c4", "value":"25"} {"name":"golf4", "value":"18"} 

Quiero ejecutar un command de shell para mostrar el contenido del file1 y el file2 . si existe un name tanto en file1 como en file2, por lo que quiero mostrar solo la línea relacionada del file2 .

Entonces la salida debería verse así:

 $command taking account file1 file2 {"name":"clio5", "value":"14"} {"name":"citroen_c4", "value":"25"} {"name":"citroen_c3", "value":"12"} {"name":"golf4", "value":"18"} {"name":"golf3", "value":"8"} 

El command no debería editar file1 ni file2

El command debe ser lo más simple posible

El command podría contener grep , sed , awk

Esto no preserva el order de las líneas, pero eso no era un requisito

 awk '{line[$1]=$0} END {for (key in line) print line[key]}' file1 file2 
 $ awk -F, 'NR==FNR{a[$1]=$0;next};$1 in a {$0=a[$1]}; 1' file2 file1 {"name":"clio5", "value":"14"} {"name":"citroen_c4", "value":"25"} {"name":"citroen_c3", "value":"12"} {"name":"golf4", "value":"18"} {"name":"golf3", "value":"8"} 

Eso supone que el file2 solo actualiza las inputs que ya se encuentran en el file1 . Si el file2 puede insert nuevas inputs, es posible que desee cambiarlo a:

 awk -F, ' NR==FNR{a[$1]=$0;next} $1 in a {$0=a[$1];delete a[$1]} 1 END{for (i in a) print a[i]}' file2 file1 

El order en que se muestran las inputs insertadas no está especificado. Lo anterior supone que solo hay una input por nombre en cada file.

Si el order no es importante, estos commands deberían hacerlo:

 cat file2 file1 > files cut -f2 -d: files | cut -f1 -d, | sort | uniq > pat for i in $(cat pat); do grep $i files -m 1; done 

El primer command se une a los files de input (el order es importante, el file2 va primero porque sus valores anularán los del file1).

El segundo command corta las marcas de automobilees de los files de input, clasifica y elimina los duplicates, y los almacena en el file pat .

El tercer command grepea cada patrón en el file de input combinado y se detiene en la primera coincidencia, de modo que si aparece la misma marca de automobile en ambos files, solo se imprime el que está en el file2.

Si el order es importante y todos los patrones están en el file 1, puede usar simplemente el file 1 en el segundo command (en lugar de los files) y omitir los commands sort y uniq .