@kamaris
Au contraire, dans ma logique, si les conditions sont moins exigeantes,
la commande fait plus de jointure et on a dit que la commande join ne ressort que les lignes qu'elle n'a pas réussi à joindre,
donc en toute logique le nombre de ligne qu'elle n'a pas réussi à joindre est moindre.
En mode test :
cat a
Fichier1
fichier2
fiChier3
Fichier4
cat b
fichier1
fichier2
fichier3
fichier4
fichier5
# Condition stricte, il ressort 4 lignes
join -v2 a b
fichier1
fichier3
fichier4
fichier5
# Condition large, il ressort 1 ligne
join -i -v2 a b
fichier5
Mais avec mes fichiers :
join -t'|' -11 -22 -v2 <(sort Fichiers.txt) <(sort -t'|' -k2 Liens.txt) | wc -l
4411
join -it'|' -11 -22 -v2 <(sort Fichiers.txt) <(sort -t'|' -k2 Liens.txt) | wc -l
238985
@Watael
Désolé pour le titre, j'ai zappé de le refaire.
ensuite, la démarche me chiffonne un peu, peut-être parce qu'il n'est pas dit que le système de fichier que tu vérifies n'est pas accessible, et que tu travailles sur une "image" contenue dans Fichiers.txt.
Bah, je ne l'ai pas dit parce que ce n'est pas le cas :
Je fais un grep dans Fichiers.txt plutôt qu'un find dans le point de montage car sinon c'est infernal niveau temps.
Comme tu vas le voir, malgré tout, ça fait gagner du temps.
Je viens de faire un test sur 11 000 lignes.
Version de base : ~ 42s
Avec ta 1ere proposition :
while IFS='|' read -ra InfoFichier
do
if [[ ! -e "${InfoFichier[1]}" ]]
then
if ! grep -qi "${InfoFichier[1]}" Fichiers.txt
then
Propositions="$(grep -i "/${InfoFichier[1]##*/}" Fichiers.txt)"
Propositions="${Propositions//\/var\/www\/html\/share_dfs/S:/Espace_Collaboratifs}"
Propositions="${Propositions//\/\\}"
Propositions="${Propositions//$'\n'/ @@@ }"
echo "${InfoFichier[0]}|${InfoFichier[2]}|${InfoFichier[3]}|${Propositions}"
fi
fi
done < Liens.txt > LiensMorts.txt
~ 12.5 sec
Sacré gain de temps en effet !
Tu propose de virer l'option -a du read ?
while IFS='|' read -r Id Lien Reste
do
if [[ ! -e "${Lien}" ]]
then
if ! grep -qi "${Lien}" Fichiers.txt
then
Propositions="$(grep -i "/${Lien##*/}" Fichiers.txt)"
Propositions="${Propositions//\/var\/www\/html\/share_dfs/S:/Espace_Collaboratifs}"
Propositions="${Propositions//\/\\}"
Propositions="${Propositions//$'\n'/ @@@ }"
echo "${Id}|${Reste}|${Propositions}"
fi
fi
done < Liens.txt > LiensMorts.txt
~ 13sec
Ça semble un chouille plus long que l'autre test.