首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查并重用编号列表中的旧编号

检查并重用编号列表中的旧编号
EN

Stack Overflow用户
提问于 2015-03-18 17:55:36
回答 1查看 86关注 0票数 1

我有一个脚本在RPi上运行在Debian上,它会随着时间的推移生成如下编号的输出,每行的第一个字符串用于将匹配的项分组在一起:

代码语言:javascript
复制
/1 AtherosC_92:f1:a7    BTHub4-NJ8S -82
/1 AtherosC_92:f1:a7    BTHub4-NJ8S -81
/2 95:8c:ed:6d:65:f5    Home245 -84
/1 AtherosC_92:f1:a7    BTHub4-NJ8S -78
/3 3d:cc:54:d1:4f:f6    BTWifi2 -82
/4 Apple_e5:e8:2d   SKYBD80F    -71
/4 Apple_e5:e8:2d   SKYBD80F    -71
/4 Apple_e5:e8:2d   SKYBD80F    -72

使用以下脚本完成分组:

代码语言:javascript
复制
declare -Ai seen=()
while read && read -r first _ <<< "$REPLY" ; do
    [[ $first ]] && printf '/%d %s\n' "${seen["$first"]=$((${#seen[@]}+1))}" "$REPLY"
done

每个列表开头的数字用于在目标程序中对它们进行排序。我需要一个方法在生成一个较高的数字之前进行检查,以查看最近是否出现了一个较低的数字(在过去30秒左右),如果没有,则重用该数字。因此,例如,如果主命令在>30秒内未输出/1,则在生成第三个唯一字符串时将发生以下情况:

代码语言:javascript
复制
/1 AtherosC_92:f1:a7    BTHub4-NJ8S -82
/1 AtherosC_92:f1:a7    BTHub4-NJ8S -81
/2 95:8c:ed:6d:65:f5    Home245 -84
/1 3d:cc:54:d1:4f:f6    BTWifi2 -82

对于如何实现这一点,有什么建议吗?无论是在狂欢中还是在其他地方?

EN

回答 1

Stack Overflow用户

发布于 2015-03-27 22:22:42

这是Generate unique tags to repeating results of a command的后续

这里有一种可能性:我们将引入另外两个数组,tagstags_time。它们的键是使用的标记;tags的字段是输出中对应的字符串(关联数组seen的键),tags_time的字段是上次使用标记时的时间戳。

然后,我们引入一个函数get_tag来解析1 up中的整数,如果一个整数是空闲的(即,对应于没有键,或者在几秒钟前使用的次数超过了delay ),则从我们的数据中删除它,并将其作为新的索引返回使用。

代码语言:javascript
复制
#!/bin/bash

declare -A seen
tags=()
tags_time=()

delay=30

get_tag() {
   local i
   for ((i=1;;++i)); do
      if [[ -z ${tags[i]} ]] || ((tags_time[i] < SECONDS-delay)); then
         break
      fi
   done
   if [[ ${tags[i]} ]]; then
      unset 'seen[${tags[$i]}]' "tags[i]" "tags_time[i]"
   fi
   get_tag_ret=$i
}

while read; do
   read -r first _ <<< "$REPLY"
   [[ $first ]] || continue
   if [[ -z ${seen["$first"]} ]]; then
      get_tag
      seen["$first"]=$get_tag_ret
      tags[get_tag_ret]=$first
      tags_time[get_tag_ret]=$SECONDS
   fi
   printf '\\%d %s\n' "${seen["$first"]}" "$REPLY"
done

我还没有测试过。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29118889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档