March 3, 200818 yr 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
March 3, 200818 yr 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?
March 3, 200818 yr Author 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
March 3, 200818 yr Ç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
March 4, 200818 yr 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 ).
March 6, 200818 yr j'ai pas tout capté mais la commande wc permet de compter le nombre de lignes, de mots ou de caractères ...
Archived
This topic is now archived and is closed to further replies.