qcm

Faire des qcm simplement - retour accueil

git clone git://bebou.netlib.re/qcm
Log | Files | Refs | README |

commit a548e505bbedd99ebe71b0cb56f99d7d167468fd
parent a070fae65dfb566604b52db41d8a27a8a84933fc
Auteurice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Thu,  7 Nov 2024 20:02:47 +0100

Traduction du percent encoding vers utf8

Pour les questions ouvertes sinon on avait des réponses type

	1   une%20r%C3%A9ponse%20illisble

le sed traduit le %20 en \x20 et le printf imprime la forme hexa en
forme utf8. Le tr sert à transformer les retours à la ligne en \0 pour
éviter l'utilisation de -d dans le xargs et être plus portable. Pas de
-r dans xargs pour la portabilité également mais cela veut dire que l'on
a toujours au moins une réponse vide (le résultat du printf à vide).
Donc on utilise le grep pour la filtrer.

Un peu alambiqué mais ça marche et devrait être plutôt portable.

Diffstat:
MREADME | 2++
Mqcm.sh | 5++++-
2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/README b/README @@ -8,6 +8,8 @@ Faire des sondages simples en parsant les logs d'un serveur web * un `mktemp` avec `-d` * `stdbuf` * `bc` + * un `sed` posix + * un xargs avec `-0` (debian et macOS l'ont) Testé sous debian 12 et le serveur web nginx packagé pour. diff --git a/qcm.sh b/qcm.sh @@ -53,7 +53,10 @@ demander() { tailpid=$! while :;do - dat=$(< $tmpd/in sort $uopt | cut -d ' ' -f7 | cut -d'/' -f3 | sort | uniq -c | sort -rn) + dat=$(< $tmpd/in sort $uopt | cut -d ' ' -f7 | cut -d'/' -f3 | + sed 's,%\([0-9A-F][0-9A-F]\),\\\x\1,g' | tr '\n' '\0' | + xargs -0 printf "%b\n" | grep -v "^$" | + sort | uniq -c | sort -rn) [ -n "$dat" ] && tot=$(( $(echo "$dat" | awk '{print $1}' | paste -s -d+ -) )) opts=$(echo "$options" | tr '~' '\n' | paste $tmpd/o -) clear