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:
M | README | | | 2 | ++ |
M | qcm.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