gpt4 book ai didi

linux - 验证是否在范围内找到条目

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:28 25 4
gpt4 key购买 nike

我有两个文件,一个包含单个条目列表 (fileA),另一个文件包含范围列表 (fileB)。

我想找出文件 A 中的哪些条目可以在文件 B 的任何范围内找到。

两个文件中的样本条目是

文件A

00100500000000
00100600000000
00100700000000
00100800000000
00100900000000
00101000000000
00101300000000
00101500000000
00101600000000
00101700000000
00101710000000
00101800000000
35014080000000
35014088000000
35067373000000

文件B

00100200000000,00100200999999
00100300000000,00100300999999
00100100000000,00100100999999
00100400000000,00100400999999
00100500000000,00100500999999
00100600000000,00100600999999
00100700000000,00100700999999
00100800000000,00100800999999
00100900000000,00100900999999
00101000000000,00101000999999
00101300000000,00101300999999
00101500000000,00101500999999
00101600000000,00101600999999
35048702000000,35048702999999
35048802000000,35048802999999
35077160000000,35077160999999
35077820000000,35077820999999
35085600000000,35085600999999

我使用了以下脚本,但完成文件 A 中的 140k 条目和文件 B 中的 50k 条目大约需要 6 天。有没有办法让它更快?

list=`cat fileB`
for mobno in $list
do
LowVal="$(echo $mobno | cut -d, -f1)"
HighVal="$(echo $mobno | cut -d, -f2)"

while read ThisLine;
do [ ${ThisLine} -ge ${LowVal} ] && [ ${ThisLine} -le ${HighVal} ] && echo "${ThisLine}";done < fileA;
done;

最佳答案

您必须测试它的性能,但可以选择以下 awk 脚本解决方案:

NR == 1 && FNR == 1 { strt=1
}
FNR == 1 && NR != 1 {
strt=0
}
strt==0 {
pos=$0
for (i in ranges) {
split(i,arry,",")
if ( pos >= arry[1] && pos <= arry[2]) {
print i" - "$0
}
}
}
strt==1 {ranges[$0]=""
}

运行:

 awk -f awkfile file B file A

输出:

00100500000000,00100500999999 - 00100500000000
00100600000000,00100600999999 - 00100600000000
00100700000000,00100700999999 - 00100700000000
00100800000000,00100800999999 - 00100800000000
00100900000000,00100900999999 - 00100900000000
00101000000000,00101000999999 - 00101000000000
00101300000000,00101300999999 - 00101300000000
00101500000000,00101500999999 - 00101500000000
00101600000000,00101600999999 - 00101600000000
00101700000000,00101700999999 - 00101700000000
00101710000000,00101710999999 - 00101710000000
00101800000000,00101800999999 - 00101800000000

我们实际上是在读取两个文件,使用变量 strt 来确定一个文件的结尾和另一个文件的开头。我们将范围读入一个数组(范围),然后从范围和文件 A 中的每个值中删除前导零以进行比较。

关于linux - 验证是否在范围内找到条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45715869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com