Ce n'est probablement pas le plus efficace, mais peut-être quelque chose à commencer.
#!/bin/bash
input_data=$(mktemp)
map_file=$(mktemp)
# your example written to a file
echo -e "AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA" >> $input_data
# create a map <numeric, factor> and write to file
idx=0
for factor in $(cat $input_data | sort -u)
do
echo $idx $factor
let idx=$idx+1
done > $map_file
# go through your file again and replace values with keys
while read line
do
key=$(cat $map_file | grep -e ".* ${line}$" | awk '{print $1}')
echo $key
done < $input_data
# cleanup
rm -f $input_data $map_file
Je voulais d'abord utiliser des tableaux associatifs, mais il est une fête 4+ et ne disposent ici et là. Si vous avez bash 4 alors vous avez un fichier de moins, ce qui est évidemment plus efficace.
#!/bin/bash
# your example written to a file
input_data=$(mktemp)
echo -e "AV1019A\nABG1787\nAV1019A\nB77hhA\nB77hhA" >> $input_data
# declare an array
declare -a factor_map=($(cat $input_data | sort -u | tr "\n" " "))
# go through your file replace values with keys
while read line
do
echo ${factor_map[@]/$line//} | cut -d/ -f1 | wc -w | tr -d ' '
done < $input_data
# cleanup
rm -f $input_data
Essayez d'ajouter quelques exemples pour clarifier les choses. – anubhava
"Les valeurs dans le vecteur numérique n'ont pas d'importance tant que chacun représente un niveau unique du facteur" - que diriez-vous d'un hachage? pas de basin intégré, mais appelez à votre hasher préféré. 'echo AV1019A | sha1sum' ou 'echo AV1019A | somme'. –
Qu'est-ce qu'un _factor_ dans ce contexte ??? –