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.comm
es 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.nl
truco de αғsнιη es útilcomm
para imponer la ordenación en los archivos.Respuestas:
Use el
diff
comando de la siguiente manera, enbash
cualquier otro shell que admita<(...)
sustituciones de proceso o puede emularlo como se muestra aquí :La salida sería:
--new-line-format='FALSE'$'\n
, imprimeFALSE
si 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'
, imprimaTRUE
si 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
paste
para crear dos columnas delimitadas por tabuladores, con el contenido de los dos archivos en cualquier columna. Elawk
comando compara las dos columnas en cada línea e imprimeTRUE
si 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,
100
y1.0e2
se consideraría idéntico. Cambie af2"" == $0
para forzar una comparación léxica en cualquier caso.Dependiendo de la
awk
implementació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
TRUE
yFALSE
en mayúsculas, reemplace la línea de impresión con una de estas:fuente
import itertools
primero y luego use enitertools.izip
lugar dezip
. De lo contrario, leerá ambos archivos en la memoria, posiblemente utilizando demasiada memoria.En
bash
, leyendo de cada archivo en unwhile
bucle, comparando las líneas de lectura e imprimiendoTRUE
oFALSE
apropiadamente:Las dos llamadas a
read
lecturas del descriptor de archivo 3 y 4 respectivamente. Los archivos se redirigen a estos con dos redirecciones de entrada al bucle.fuente
salida
fuente