[BASH] Génération nombre aléatoire [Résolu/Fermé]

Signaler
Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
-
Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
-
Bonjour,

J'ai un script bash :

#/bin/bash

if [ $# -ne 1 ]; then
echo "error: usage $0 " 1>&2
echo "returns an average line of the input file" 1>&2
exit 1
fi

input=$1; shift
size=`wc -l $input | awk '{print $1}'`
TIME=`date +%s`

awk 'BEGIN{srand(ARGV[3]); line=int(rand() * (ARGV[2])) + 1;ARGC-=2}NR==line{print}' $input $size $$


Je comprends bien toutes les lignes mais impossible de comprendre le ARGC-=2 de l'avant dernière ligne.

Avez-vous une idée ? Merci.
Google est ton ami :)

4 réponses

Messages postés
18225
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 septembre 2020
5 016
non, sans le -2, awk va traiter $size et $$ comme des noms de fichiers à lire
il faudrait plutot passer par des variables
awk -v v1=$size -v v2=$$ 'BEGIN{srand(v2); line=int(rand() * (v1)) + 1}NR==line{print}' $input
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 60769 internautes nous ont dit merci ce mois-ci

Messages postés
18225
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
28 septembre 2020
5 016
hello
ARGC est le nombre d'arguments passés à awk (3 : $input $size $$)
en le décrementant de 2, on ne garde que $input, les 2 autres ayant été traités par srand et rand
Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
117
Il n'était pas possible de faire ?

awk 'BEGIN{srand(ARGV[3]); line=int(rand() * (ARGV[2])) + 1;ARGV[1]}NR=R=line{print}' $input $size $$

Google est ton ami :)
Messages postés
1359
Date d'inscription
dimanche 26 octobre 2008
Statut
Membre
Dernière intervention
24 avril 2020
117
Merci dubcek, c'est bien clair maintenant =)