Posté(e) le 3 mars 200817 a 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
Posté(e) le 3 mars 200817 a 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?
Posté(e) le 3 mars 200817 a Auteur SalutJe 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
Posté(e) le 3 mars 200817 a Ç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
Posté(e) le 4 mars 200817 a Pour comparer des binaires tu peux utiliser hexdump ou strings (pas lu les réponses au dessus désolé si c'est un post inutile ).
Posté(e) le 6 mars 200817 a j'ai pas tout capté mais la commande wc permet de compter le nombre de lignes, de mots ou de caractères ...
Posté(e) le 22 mars 200817 a nm/objdump ? (c'est pas exactement ce que tu cherche, mais pourqoi pas ?)
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.