Comando fc de Windows 10: comparación de archivos separados por comas


1

Tengo dos archivos con 3 GB cada uno para hacer una comparación y almacenar los datos de diferencia en el tercer archivo.

A continuación se muestran los datos de muestra.

Archivo 1 : June_01_2018.csv

ingrese la descripción de la imagen aquí

Archivo 2 : June_02_2018.csv

ingrese la descripción de la imagen aquí

Nota : Quiero almacenar la diferencia en el tercer archivo con los encabezados de columna.

Resultado esperado : el tercer archivo debe contener los registros del ID11 al 15 con los encabezados de columna.

Mi intento : fccomando en el símbolo del sistema,

>fc June_01_2018.csv June_02_2018.csv > June_Diff.csv

Pero obteniendo resultados inesperados:

ingrese la descripción de la imagen aquí


1
Relacionado: Cómo comparar dos archivos csv en windows . fces una herramienta de línea de comandos interactiva, es decir, siempre producirá una salida legible por humanos. Además, compara los archivos de texto línea por línea y no conoce el significado de las líneas. En su caso, la primera línea que contiene los encabezados de columna es idéntica en ambos archivos, por lo que no se imprime. Si lee los documentos , verá que su salida es la salida esperada. Dudo que fcsea ​​la herramienta adecuada para esta tarea.
danzel

Respuestas:


1

Las esperanzas no tienen nada que ver con las expectativas (realistas).

El encabezado es exactamente el mismo, por lo que nunca podría ser una diferencia.
Además, la representación de Excel no es el archivo csv, debe publicar los archivos originales como texto.

El siguiente archivo por lotes lee en el encabezado y hace eco a la diferencia.
En lugar de fc, usa findtr con opciones

/B compare from line begin
/E compare upto line end
/V output lines **not** present in compared file
/G: get strings from a file

@Echo off
Set "File1=June_01_2018.csv"
Set "File2=June_02_2018.csv"
Set "File3=June_Diff.csv"

Set /P "Header="<"%File1%"
( Echo=%Header%
  Findstr.exe /BEV /G:"%File2%" "%File1%"
)>"%File3%"

Variante con fc

@Echo off
Set "File1=June_01_2018.csv"
Set "File2=June_02_2018.csv"
Set "File3=June_Diff.csv"

Set /P "Header="<"%File1%"
( Echo=%Header%
  fc "%File1%" "%File2%"|more +3 
)>"%File3%"

Eso deja solo la línea final.


Obteniendo un error FINDSTR: Search string too long.
MAK

¿Con qué tamaños de archivo está tratando?
LotPings

El archivo es de 3 GB cada uno.
MAK

Bueno, eso definitivamente excede los límites de findtr Puede usar el enfoque de encabezado, agregar la variante fc y ajustar la salida eliminando las líneas no deseadas que comienzan con comparingy*****
LotPings

Intenté con el comando fc con tu código. Pero al obtener el error RESYNC FALLÓ. Para superar esto, acabo de agregar / Lb 200000 a fc debido a que la diferencia entre dos archivos viene con alrededor de 1 millón de registros más o menos. El script todavía se está ejecutando desde los últimos 15 minutos ..
MAK
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.