为了好玩,我想对照中奖者检查生成的乐透号码,以查看中奖需要多少张彩票。
我有一个生成器,可以生成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张票时停止。
答案 0 :(得分:0)
如何避免写中间文件呢?您可以为此使用进程替换:
awk '....' win.txt <(./generator 10)
答案 1 :(得分:0)
假设有两个数字文件(每行一个),则标准utils应该起作用:
grep -w -f win.txt test10.txt
按排序顺序:sort win.txt test10.txt | uniq -d