#!/bin/sh# 1ドル: input filefor c in 'grep''seq''test'doif ! command -v "$c" >/dev/null
thenecho"Error: command '$c' not found" >&2exit3fidoneiftest -z "1ドル"thenecho"Please call me with an input file..." >&2exit1fiif grep -Eqsv '^[0-9]+-[0-9]+,[0-9]+-[0-9]+$'"1ドル"thenecho"Found invalid line, check the file!" >&2exit2fi_if="1ドル"# First or Second elves in paire# Start or End of section number_oc=0# Overlap CounterwhileIFS='-,'read -r _fs _fe _ss _se <&3do_s1=",$( seq -s ','$_fs$_fe)"# 1st range sections list_s2=",$( seq -s ','$_ss$_se)"# 2nd range sections listiftest -z "${_s1##*$_s2*}"||test -z "${_s2##*$_s1*}"then_oc=$(( _ic +1))fidone3<"$_if"echo"$_oc"
Je ne sais pas pourquoi ça m'a fait penser à seq et jot (que j'ai déjà eu à mentionner.)
_s1=",$( jot -s ',' - $_fs$_fe),"# 1st range sections list_s2=",$( jot -s ',' - $_ss$_se),"# 2nd range sections list
L'écriture en extension a été inspiré par l'exemple donné
.234..... 2-4
.....678. 6-8
...mais j'utilise un séparateur car on peut avoir des nombre de plusieurs chiffres
,2,3,4, 2-4
,6,7,8, 6-8
Après il suffit de vérifier qu'une des deux sous-chaines est dans l'autre. :)
Ici j'ai utilisé les possibilités de substitution et expansion du shell, mais on peut faire appel à une autre commande pour plus de lisibilité.
Noter que l'on peut utiliser seq et jot sans option -s puis rediriger dans un fichier distinct puis appliquer comm aux deux fichiers comme déjà vu.
Exceptionnellement, je mentionne deux commandes non POSIX mais répandues (cependant la syntaxe du script demeure sans bashism.) On peut remplacer par une fonction maison pour plus de portabilité.
Dans tous les cas, on traite le problème en peu de lignes avec les outils disponibles. :)
"It is seldom that liberty of any kind is lost all at once." ― David Hume
# un peu de sh
Posté par Gil Cot ✔ (site web personnel, Mastodon) . En réponse au message Avent du Code, jour 4. Évalué à 1. Dernière modification le 12 décembre 2022 à 01:39.
Pour la première partie.
Je ne sais pas pourquoi ça m'a fait penser à
seqetjot(que j'ai déjà eu à mentionner.)L'écriture en extension a été inspiré par l'exemple donné
...mais j'utilise un séparateur car on peut avoir des nombre de plusieurs chiffres
,2,3,4, 2-4
,6,7,8, 6-8
Après il suffit de vérifier qu'une des deux sous-chaines est dans l'autre. :)
Ici j'ai utilisé les possibilités de substitution et expansion du shell, mais on peut faire appel à une autre commande pour plus de lisibilité.
Noter que l'on peut utiliser
seqetjotsans option-spuis rediriger dans un fichier distinct puis appliquercommaux deux fichiers comme déjà vu.Exceptionnellement, je mentionne deux commandes non POSIX mais répandues (cependant la syntaxe du script demeure sans bashism.) On peut remplacer par une fonction maison pour plus de portabilité.
Dans tous les cas, on traite le problème en peu de lignes avec les outils disponibles. :)
"It is seldom that liberty of any kind is lost all at once." ― David Hume