为了好玩,我想检查生成的乐透号码与胜出的号码,看看它将赢得多少票。
我有一个生成x票的生成器,我有一个单独的检查器从文件中读入。我希望将两者结合起来,因为当前单独执行它是因为所有磁盘读写都很慢。我的问题是,最好的方法是什么?
./generator 10 >test10.txt
#!/bin/bash
tickets="$1"
function gen_numbers {
for ((z = 1; z<=tickets ; z++)); do
i=0
used=( 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 )
printf "$z ";
for (( ; i<6; )); do
x=`echo $[ 1 + $[ RANDOM % 59 ]]`;
if [ ${used[$x]} -eq 0 ]
then
printf "$x ";
i=$((i + 1))
used[$x]=1
fi
done;
printf "\n"
done;
printf " \n"; }
############################
if [[ -z $tickets ]] ; then
get_tickets
gen_numbers
else
gen_numbers
fi
检查门票./checker
awk ' FILENAME=="win.txt" {
for(i=1;i<=NF; i++) { win[$i]=1}
}
FILENAME=="test10.txt" {
tmp=0
for(i=1; i<= NF; i++) { if($i in win){ tmp++} }
if(tmp >5) {arr[$0]=tmp}
}
END {for ( i in arr) {print arr[i], i}} ' win.txt test10.txt
理想情况下,我希望我的代码只显示它生成/检查的票数,并在匹配所有6票后停止。
那些像避免中间文件编写一样简单的事情呢?您可以使用进程替换来实现此目的:
awk '....' win.txt <(./generator 10)
假设有两个数字文件(每行一个),标准工具应该可以工作:
grep -w -f win.txt test10.txt
sort win.txt test10.txt | uniq -d