如何检查另一组数字

问题描述 投票:0回答:2

为了好玩,我想检查生成的乐透号码与胜出的号码,看看它将赢得多少票。

我有一个生成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票后停止。

bash shell
2个回答
0
投票

那些像避免中间文件编写一样简单的事情呢?您可以使用进程替换来实现此目的:

awk '....' win.txt <(./generator 10)

0
投票

假设有两个数字文件(每行一个),标准工具应该可以工作:

  1. grep -w -f win.txt test10.txt
  2. 按顺序排列:sort win.txt test10.txt | uniq -d
© www.soinside.com 2019 - 2024. All rights reserved.