如何对照另一组数字检查一组数字

时间:2019-02-17 09:44:50

标签: bash shell

为了好玩,我想对照中奖者检查生成的乐透号码,以查看中奖需要多少张彩票。

我有一个生成器,可以生成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张票时停止。

2 个答案:

答案 0 :(得分:0)

如何避免写中间文件呢?您可以为此使用进程替换:

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

答案 1 :(得分:0)

假设有两个数字文件(每行一个),则标准utils应该起作用:

  1. grep -w -f win.txt test10.txt

  2. 按排序顺序:sort win.txt test10.txt | uniq -d