如何将与范围列表关联的变量分配给另一个带有整数的表

如何将与范围列表关联的变量分配给另一个带有整数的表

我有一个从 1 到 6k 的整数列表,还有一个范围列表(开始/停止),其中包含我想分配给这些范围内的每个整数的第三个值。范围列表可能看起来像这样,尽管实际上每个文件将有数百个唯一范围来检查每个整数。

5277 5305 72

5306 5331 50

5332 5361 57

5368 5389 55

我想做的是打印范围表第三列中的整数和值,或者为不属于任何范围的整数打印“0”。

1 0

2 0

3 0

...

5277 72

5278 72

5279 72

...

5305 72

5306 50

5307 50

...

6000 0

关于如何获得预期结果有什么想法吗?我正在考虑为整数 1-6000 编写“for”循环,并嵌入“if”文件来检查每个范围中的每个整数,但不想单独编写数百个“if”语句,只是为了将它们更改为下一个数据集。也许这可以通过在 MySQL 中创建一个范围表并对照表检查 6000 个值中的每一个并打印结果来完成,但我对 MySQL 不太熟悉,所以我需要更长的时间才能弄清楚。

答案1

这有点复杂,但至少避免了 SQL 的使用。使用名为“range”的文件中的样本范围:

seq 6000 > integers
awk '{print $1","$2"{s/\\(.*\\)/\\1 "$3"/; t\n}" } END { print "s/\\(.*\\)/\\1 0/" }' range > range.sed
sed -f range.sed integers > integers.output

这将创建数字为 1..6000 的整数文件,然后使用 awk 将范围文件转换为一系列sed命令,然后将所有命令重定向到 sed 脚本文件 (range.sed)。然后,我们在整数输入上使用该 sed 脚本文件调用 sed,并将其重定向到输出文件。

awk 脚本做了两个基本的事情:

  1. 使用两个命令块打印“开始,停止”范围(使用范围文件中的第一个和第二个字段):

    A。打印出 sed 搜索并用“之前的任何内容”替换“行上的任何内容”命令,后跟范围文件的第三列。

    b.如果替换成功,则分支到 sed 脚本的末尾(因此绕过 sed 脚本的最后一部分)

  2. 作为 sed 脚本中的最后一个命令(在结束所有范围输入之后),打印出 sed 搜索和替换命令,以将该行上的任何值替换为该值后跟零。

这使您能够相当灵活地根据需要更新范围和/或整数文件,而无需更新大量硬编码逻辑。

相关内容