usar strings script otro else ejemplos dentro condicion comparar como cadenas anidados string bash grep find compare

strings - if else anidados bash



Compara dos archivos en bash (4)

Me gustaría proponer una solución utilizando las herramientas estándar diff y basename :

while read filename do basename "$filename" done < tmp2.txt > tmp2.basenames.txt diff -u tmp1.txt tmp2.basenames.txt

La principal ventaja de esta solución es su simplicidad. Sin embargo, la salida se verá un poco diferente, diferenciando entre los archivos en tmp1.txt ( - ), tmp2.txt ( + ) o ambos ( )

--- tmp1.txt 2014-09-17 17:09:43.000000000 +0200 +++ tmp2.basenames.txt 2014-09-17 17:13:12.000000000 +0200 @@ -1,4 +1,4 @@ aaa.txt +aac.txt bbb.txt ccc.txt -ddd.txt

Tengo dos archivos tmp1.txt y tmp2.txt tmp1.txt

aaa.txt bbb.txt ccc.txt ddd.txt

tmp2.txt tiene

/tmp/test1/aaa.txt /tmp/test1/aac.txt /tmp/test2/bbb.txt /tmp/test1/ccc.txt

Quiero verificar si los archivos en tmp1.txt existen en tmp2.txt y si existe mostrar cuál tiene, entonces muestra algo similar a este

aaa.txt: test1 bbb.txt: test2 ccc.txt: test1

Gracias


Si no quieres usar awk, hay un pequeño ciclo bash:

while read f; do isFound="$(grep /$f tmp2.txt 2>/dev/null)" if [ ! -z "$isFound" ]; then theDir=$(echo "$isFound"|cut -d''/'' -f3) echo "$f: $theDir" fi done <tmp1.txt


Usando awk :

awk -F/ ''FNR==NR {a[$1];next} $NF in a {print $NF ": " $(NF-1)}'' tmp1.txt tmp2.txt aaa.txt: test1 bbb.txt: test2 ccc.txt: test1


Bash Solución:

#!/bin/bash while read file && a=$(grep -Fw "$file" tmp2.txt) do echo "$(basename $a): $(dirname $a)" done < tmp1.txt