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