[BASH] Génération nombre aléatoire

Résolu/Fermé
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - Modifié par patrice86 le 5/11/2014 à 15:20
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 - 7 nov. 2014 à 16:02
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

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
7 nov. 2014 à 15:57
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
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 6/11/2014 à 08:34
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
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
Modifié par patrice86 le 7/11/2014 à 15:26
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 :)
0
patrice86 Messages postés 1378 Date d'inscription dimanche 26 octobre 2008 Statut Membre Dernière intervention 26 novembre 2023 125
7 nov. 2014 à 16:02
Merci dubcek, c'est bien clair maintenant =)
0