You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Unix环境的滑动窗口式数组分组实现方案咨询

Unix环境下实现数组滑动窗口分组

Bash脚本实现(处理内存数组)

直接利用Bash的数组切片特性实现,支持自定义窗口大小g:

#!/bin/bash

# 示例数组(可替换为你的目标数组)
arr=(a b c d e f g h i j k l m)
# 自定义窗口大小
window_size=4

arr_length=${#arr[@]}
# 计算最后一个分组的起始索引,保证每个分组都有window_size个元素
max_start_idx=$((arr_length - window_size))

# 遍历所有起始位置,生成滑动窗口分组
for ((i=0; i<=max_start_idx; i++)); do
    # 从索引i开始截取window_size个元素
    current_group=("${arr[@]:i:window_size}")
    # 输出分组(如需保留元素内空格,用"${current_group[@]}"替代)
    echo "${current_group[*]}"
done

代码说明

  • ${#arr[@]}:获取数组的总元素数
  • ${arr[@]:i:window_size}:Bash数组切片语法,从索引i开始提取window_size个元素
  • 循环范围0到max_start_idx,确保每个分组都包含完整的window_size个元素,窗口每次滑动1位

awk实现(处理文本流)

如果元素按行存储在文本文件中,用awk可直接处理:

假设输入文件elements.txt内容为:

a
b
c
d
e
f
g
h
i
j
k
l
m

执行命令(替换4为你的窗口大小):

awk -v win=4 '{ buf[NR] = $0 } END {
    for (start=1; start<=NR-win+1; start++) {
        for (idx=start; idx<start+win; idx++) {
            printf "%s ", buf[idx]
        }
        print ""
    }
}' elements.txt

代码说明

  • -v win=4:传递窗口大小参数到awk脚本
  • buf[NR] = $0:将每行内容存入awk数组
  • 外层循环控制窗口起始位置,内层循环输出当前窗口的所有元素

边界情况处理

  • 当窗口大小g大于数组/文本行数时:脚本自动判断,若g不大于元素总数则生成1个分组,否则无输出
  • 若元素包含空格:Bash脚本中输出时使用"${current_group[@]}",awk脚本无需额外处理(默认按行存储完整元素)

内容的提问来源于stack exchange,提问作者gwot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 21:36:16