Quelles commande(s) allons-nous (re)découvrir aujourd'hui ?
Voici pour la première partie.
#!/bin/sh# 1ドル: input filefor c in 'grep''sed''sort''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 '^[a-zA-Z]+$'"1ドル"thenecho"Found invalid line, check the file!" >&2exit2fi_if="1ドル"_fc=$( mktemp )# first compartiment_sc=$( mktemp )# second compartiment_si=''# shared itemswhileIFS=read -r line <&3doprintf'%s'"$line"| cut -c -$((${#line}/2))|
sed 's/./&\n/g'| sort -uo "$_fc"printf'%s'"$line"| cut -c $((${#line}/2+1))- |
sed 's/./&\n/g'| sort -uo "$_sc"_si="$_si$( comm -12 "$_fc""$_sc")"done3<"$_if"
rm "$_fc""$_sc"#echo "$_si" | cat -vet_ps=0# priority sum_ac=0# ASCII codefor character in $(echo"$_si")do_ac=$(printf'%d'"'$character")case"$character" in
[a-z])# a is 97 but should translate to 1_ps=$(( _ps + _ac -96));;[A-Z])# A is 65 but should translate to 27_ps=$(( _ps + _ac -38));;
*)echo"$character=$_ac=??" >&2;;esacdoneecho"$_ps"
La grande difficulté est que l'écriture suivante (à laquelle j'ai initialement pensée) n'est pas POSIX (c'est une facilité de (ba|k|z)sh mais pas reconnue dans ash par exemple)
_fc=''# first compartiment_sc=''# second compartiment_si=''# shared itemswhileIFS=read -r line
do_fc="$(printf'%s'"$line"| cut -c -$((${#line}/2))|
sed 's/./&\n/g'| sort )"_sc="$(printf'%s'"$line"| cut -c $((${#line}/2+1))- |
sed 's/./&\n/g'| sort )"_si="$_si$( comm -12 <(printf'%s'"$_fc") <( printf '%s' "$_sc" ) )"done <"$_if"
Pas grave, on troque l'utilisation de RAM (dont la machine où j'ai testé manque un peu) contre des fichiers (j'ai des E/S sur disque assez performantes pour que ce ne soit pas problématique.)
"It is seldom that liberty of any kind is lost all at once." ― David Hume
# un bout de coquillage
Posté par Gil Cot ✔ (site web personnel, Mastodon) . En réponse au message Avent du Code, jour 3. Évalué à 2.
Quelles commande(s) allons-nous (re)découvrir aujourd'hui ?
Voici pour la première partie.
La grande difficulté est que l'écriture suivante (à laquelle j'ai initialement pensée) n'est pas POSIX (c'est une facilité de
(ba|k|z)shmais pas reconnue dansashpar exemple)Pas grave, on troque l'utilisation de RAM (dont la machine où j'ai testé manque un peu) contre des fichiers (j'ai des E/S sur disque assez performantes pour que ce ne soit pas problématique.)
"It is seldom that liberty of any kind is lost all at once." ― David Hume