2011-01-12 10 views
1

これではそれほど素晴らしいとは言えませんが、乱数を選ぶbashスクリプトがあります。その後、sedを使ってファイルの行を読み込みます。 それは動作していないと私は何か間違っている必要があります。誰か私のコードを修正できますか?bashとsedの使用

これらのファイルのそれぞれから行(乱数)を引き出し、その間にスペースを入れた単一の文字列として出力します。

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 

答えて

0

次のスクリプトは、指定したファイル4入力の各々からその行を取得し、$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 

注:あなたは4つの入力ファイルのそれぞれから(潜在的に)異なる行番号をしたい場合は、単純にforループ内でNUMBER=文を置きます。

+0

これは完璧だった、ありがとう! – switz

1

NUMBER(または他のテキストがすぐ隣にある場合は${NUMBER})ではなく、sedコマンドで$NUMBERを使用する必要があります。例:

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

これは、最初の100行だけでなく、各ファイル全体から選択する利点があります。各ファイルから異なる行が選択されます。

for f in Street City State Zip 
do 
    printf '%s ' "$(shuf -n 1 "/Users/user/Desktop/$f.txt")" 
done 
printf '\n' 
関連する問題