2011-01-12 87 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个输入文件不同的行号,然后简单地把NUMBER=语句for循环中。

+0

这是完美的,谢谢! – switz 2011-01-12 04:41:58

1

您可能需要在您的sed命令中使用$NUMBER,而不仅仅是NUMBER(或${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'