![¿Cómo puedo comprobar si aparece el mismo texto en dos archivos diferentes?](https://rvso.com/image/169430/%C2%BFC%C3%B3mo%20puedo%20comprobar%20si%20aparece%20el%20mismo%20texto%20en%20dos%20archivos%20diferentes%3F.png)
Quiero comprobar (truco o cualquier atajo) si existe una cadena de texto en dos archivos.
El contenido del archivo uno es
a.txt
b.txt
c.txt
d.txt
El contenido del archivo dos es
c.txt
a.txt
d.txt
¿Cómo puedo comprobar si la cadena del archivo uno coincide con la cadena del archivo dos?
Respuesta1
dominio
Método 1:
for i in `cat p1`; do grep -i "$i" p2 >/dev/null; if [[ $? == 0 ]]; then echo "$i exsists in both files"; else echo "$i doesnt exsists in file p2"; fi; done
producción
a.txt exsists in both files
b.txt doesnt exsists in file p2
c.txt exsists in both files
d.txt exsists in both files
Respuesta2
Con join
ysort
grep
join <(sort /path/to/source) <(sort /path/to/destination) | grep '<string to check>
Pruebas
cat source
a.txt
b.txt
c.txt
d.txt
cat destination
c.txt
a.txt
d.txt
join <(sort source) <(sort destination) | grep 'a.txt'
a.txt
join <(sort source) <(sort destination) | grep 'b.txt'
Si el requisito es verificar si el contenido de dos archivos no coincide, se puede emitir el siguiente comando
cmp --silent <(sort source) <(sort destination) || echo "files are different"
Pruebas
cmp --silent <(sort source) <(sort destination) || echo "files are different"
files are different
Para agregar todas las líneas en el archivo fuente que no están contenidas en el archivo de destino en el archivo /var/tmp/unmatched
comm -23 <(sort source) <(sort destination) > /var/tmp/unmatched
Para eliminar del archivo de origen todas las líneas que no están contenidas en el archivo de destino
comm -1 <(sort source) <(sort destination) >| source
Dado que estamos en bash y si ha configurado noclobber como set -o noclobber
, entonces debe usar la sintaxis >|
.
Respuesta3
Hecho usando el siguiente comando awk
f2count=`awk 'END{print NR}' p2`
f1count=`awk 'END{print NR}' p1 `
comm_p1_p2=`awk 'NR==FNR{a[$0];next}($0 in a){print $0}' p1 p2| awk 'END{print NR}'`
if [[ $f1count -eq $f2count ]] && [[ $f1count -eq $comm_p1_p2 ]]; then echo "both files p1 and p2 content are same"; else echo "different content found on file p1 and p2"; fi