2011-01-12 2 views
1

Ok, donc je ne suis pas très bon, mais j'ai un script bash pour choisir un nombre aléatoire, puis utiliser sed pour lire des lignes de fichiers. Ça ne marche pas et j'ai dû faire quelque chose de mal. Quelqu'un pourrait-il corriger mon code?Utilisation de bash et sed

Je veux que le code tire la ligne (nombre aléatoire) de chacun de ces fichiers, puis l'affiche en une seule chaîne (avec des espaces entre).

NUMBER=$[ ($RANDOM % 100) + 1 ] 
sed -n NUMBER'p' /Users/user/Desktop/Street.txt 
sed -n NUMBER'p' /Users/user/Desktop/City.txt 
sed -n NUMBER'p' /Users/user/Desktop/State.txt 
sed -n NUMBER'p' /Users/user/Desktop/Zip.txt 

Répondre

0

Le script suivant utilisera le même nombre choisi au hasard pour saisir cette ligne de chacune des 4 entrées vous les fichiers spécifiés et concaténer ces lignes dans une seule variable appelée $outstring.

#!/bin/bash 

NUMBER=$(((RANDOM % 100)+1)) 

for file in Street City State Zip; do 
    outstring+="$(sed -n "${NUMBER}p" "./${file}.txt") " 
done 

echo $outstring 

Note: Si vous voulez (potentiellement) différents numéros de ligne de chacun des 4 fichiers d'entrée, puis il suffit de mettre la déclaration NUMBER= dans la boucle for.

+0

C'était parfait, merci! – switz

1

Vous avez probablement besoin d'utiliser $NUMBER dans vos commandes sed, plutôt que simplement NUMBER (ou ${NUMBER} si un autre texte est directement à côté). Exemple:

sed -n "${NUMBER}p" /Users/user/Desktop/Street.txt 
-1

Ceci a l'avantage de choisir dans l'ensemble de chaque fichier plutôt que seulement les 100 premières lignes. Il va choisir une ligne différente de chaque fichier.

for f in Street City State Zip 
do 
    printf '%s ' "$(shuf -n 1 "/Users/user/Desktop/$f.txt")" 
done 
printf '\n' 
Questions connexes