Archivo1:
123
234
345
456
Archivo2:
123
234
343
758
Salida esperada: File3:
TRUE
TRUE
FALSE
FALSE
entonces el código debe comparar dos archivos e imprimir 'VERDADERO' si coincide, de lo contrario debería imprimir 'FALSO' en el nuevo archivo. ¿Alguien podría proporcionar la solución para esto?
text-processing
awk
diff
Velu
fuente
fuente

diff.comm. Facilita la enumeración de líneas que ambos archivos tienen en común o son exclusivas de uno u otro.commes que requiere una entrada ordenada. Además del hecho de que el ejemplo en la pregunta tiene una entrada ordenada, la pregunta nunca afirma que estos son los datos reales que se están utilizando y nunca dice nada sobre el orden de los datos.nltruco de αғsнιη es útilcommpara imponer la ordenación en los archivos.Respuestas:
Use el
diffcomando de la siguiente manera, enbashcualquier otro shell que admita<(...)sustituciones de proceso o puede emularlo como se muestra aquí :La salida sería:
--new-line-format='FALSE'$'\n, imprimeFALSEsi las líneas eran diferentes y con la--old-line-format=''opción de deshabilitar la salida si la línea era diferente para el archivo1, que se conoce como comando de archivo antiguo a difFALSE.--unchanged-line-format='TRUE'$'\n', imprimaTRUEsi las líneas fueran iguales. La$'\n'sintaxis de escape de estilo C se utiliza para imprimir una nueva línea después de cada salida de línea.fuente
Suponiendo que los archivos no contienen caracteres de tabulación:
Esto se usa
pastepara crear dos columnas delimitadas por tabuladores, con el contenido de los dos archivos en cualquier columna. Elawkcomando compara las dos columnas en cada línea e imprimeTRUEsi las columnas son iguales y, de lo contrario, imprimeFALSE.fuente
Suponiendo que ambos archivos tengan el mismo número de líneas:
Eso es hacer una comparación numérica si las cadenas para comparar son números y léxico de lo contrario. Por ejemplo,
100y1.0e2se consideraría idéntico. Cambie af2"" == $0para forzar una comparación léxica en cualquier caso.Dependiendo de la
awkimplementación, la comparación léxica se realizará como si se usaramemcmp()(comparación byte a byte) o como si se usarastrcoll()(si las dos cadenas se ordenan de la misma manera en el orden de clasificación de la configuración regional). Eso puede marcar la diferencia en algunas configuraciones regionales donde el orden no está definido correctamente para algunos caracteres, no en todos los dígitos decimales como en su muestra.fuente
Python 3
Salida:
Si lo necesita
TRUEyFALSEen mayúsculas, reemplace la línea de impresión con una de estas:fuente
import itertoolsprimero y luego use enitertools.iziplugar dezip. De lo contrario, leerá ambos archivos en la memoria, posiblemente utilizando demasiada memoria.En
bash, leyendo de cada archivo en unwhilebucle, comparando las líneas de lectura e imprimiendoTRUEoFALSEapropiadamente:Las dos llamadas a
readlecturas del descriptor de archivo 3 y 4 respectivamente. Los archivos se redirigen a estos con dos redirecciones de entrada al bucle.fuente
salida
fuente