2011-01-12 14 views
1

Okay, also bin ich nicht zu gut darin, aber ich habe ein Bash-Skript, um eine Zufallszahl auszuwählen, dann verwenden Sie sed, um Zeilen aus Dateien zu lesen. Es funktioniert nicht und ich muss etwas falsch gemacht haben. Kann jemand meinen Code korrigieren?Verwenden von bash und sed

Ich möchte, dass der Code die Zeile (Zufallszahl) aus jeder dieser Dateien zieht und dann als einzelne Zeichenfolge (mit Leerzeichen dazwischen) ausgibt.

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 

Antwort

0

Das folgende Skript wird die gleichen zufällig ausgewählte Nummer verwenden diese Zeile von jedem der vier Eingangs zu greifen Dateien, die Sie festgelegt und diese Zeilen in einer einzigen Variable $outstring genannt verketten.

#!/bin/bash 

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

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

echo $outstring 

Hinweis: Wenn Sie (möglicherweise) unterschiedliche Zeilennummern von jedem der vier Eingabedateien, dann stellen die NUMBER= Anweisung innerhalb der for-Schleife.

+0

Das war perfekt, danke! – switz

1

Sie müssen wahrscheinlich $NUMBER in Ihren sed-Befehlen verwenden, anstatt nur NUMBER (oder ${NUMBER}, wenn ein anderer Text direkt daneben steht). Beispiel:

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

Dies hat den Vorteil, dass Sie nicht nur die ersten 100 Zeilen, sondern die gesamte Datei auswählen. Es wird eine andere Zeile aus jeder Datei auswählen.

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