Aller au contenu

besoin d'un petit script


Messages recommandés

Salut,

J'ai hésité entre ici et "programmation"...

Idéalement, c'est un cmp de deux fichiers binaires (qui retourne un txt sur la sortie standard), calcul le nombre de ligne (donc le nombre d'octets différends), en comptant les \n par exemple, et calcule ce nombre / taille fichier pour savoir le pourcentage d'octets différent.

Quelqu'un peut il m'aider ?

Merci

Lien vers le commentaire
Partager sur d’autres sites

Salut

Je dois dire que je ne comprends pas toute la question ni le résultat attendu...

Néanmoins as-tu essayé avec diff ? Si oui, qu'est-ce qui l'empeche de fonctionner convenablement ? Ou du moins, qu'est-ce qui ne répond pas à ton attente dans cette commande?

Lien vers le commentaire
Partager sur d’autres sites

Salut

Je dois dire que je ne comprends pas toute la question ni le résultat attendu...

Néanmoins as-tu essayé avec diff ? Si oui, qu'est-ce qui l'empeche de fonctionner convenablement ? Ou du moins, qu'est-ce qui ne répond pas à ton attente dans cette commande?

je veux avoir en % le nombre d'octets différent entre 2 binaires

Lien vers le commentaire
Partager sur d’autres sites

Ça n'affiche pas le pourcentage car l'interprétation de "octet ajouté", "octet supprimé" ou "octet modifié" est assez difficile à faire, surtout lorsque les deux fichiers ne sont pas de la même taille.

Mais tu peux rajouter des infos à la fin avec le calcul que tu veux :)

#!/bin/sh
if [ "$1" = "-v" ]
then
VERBOSE="1"
shift
fi
if ! [ "$1" -a "$2" ]
then
echo "Usage: $0 file1 file2"
exit 1
fi
if ! ls "$1" "$2" >/dev/null
then
exit 1
fi
# temporary files names
T1="$(mktemp)" || exit 1
T2="$(mktemp)" || exit 1
# list bytes
[ "$VERBOSE" ] && echo -n "List $1 bytes..."
hexdump -v -e '1/1 "%02x\n" ""' "$1" > "$T1"
[ "$VERBOSE" ] && echo " done"
[ "$VERBOSE" ] && echo -n "List $2 bytes..."
hexdump -v -e '1/1 "%02x\n" ""' "$2" > "$T2"
[ "$VERBOSE" ] && echo " done"
# line count
L1="$(wc -l < "$T1")"
L2="$(wc -l < "$T2")"
# size
S1="$(ls -lL "$1" | awk '{print $5}')"
S2="$(ls -lL "$2" | awk '{print $5}')"
# is line count the same than size? should be
if [ "$L1" != "$S1" ]
then
echo "Error: L1!=S1"
echo "L1=$L1"
echo "S1=$S1"
exit 1
fi
if [ "$L2" != "$S2" ]
then
echo "Eerror: L2!=S2"
echo "L2=$L2"
echo "S2=$S2"
exit 1
fi
[ "$VERBOSE" ] && echo -n "Generate diff..."
STATS="$(diff "$T1" "$T2" | diffstat -tu | grep -v '^INSERTED' | awk -F, '{print $1" "$2" "$3}')"
[ "$VERBOSE" ] && echo " done"
[ "$VERBOSE" ] && echo ""
rm -f "$T1" "$T2"
echo "$1 size: $L1 bytes"
echo "$2 size: $L2 bytes"
echo ""
INS="$(echo "$STATS" | awk '{print $1}')"
DEL="$(echo "$STATS" | awk '{print $2}')"
MOD="$(echo "$STATS" | awk '{print $3}')"
echo "bytes inserted: $INS"
echo "bytes deleted:  $DEL"
[ "$MOD" != "0" ] && echo "bytes modified: $MOD" # should be 0
exit 0

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...