arrays - 你如何打破一组 n 的数组

标签 arrays bash

这类似于 Add '\n' after a specific number of delimiters ,但是,如果组中的元素是可编程的,让我们假设这个数字。

我们有:

aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj,kkk,lll,mmm
g=4

我们想要

aaa,bbb,ccc,ddd
eee,fff,ggg,hhh
iii,jjj,kkk,lll
mmm

我们如何使用 bash 完成此任务?

我已经尝试了多种选择。这是最新的失败(tmp[] 是数组):

for e in ${tmp[@]}; do 
  for i in $(eval echo "{0..$groupsof}"); do 
    foo[$i]=$e; 
  done
done

最佳答案

使用子字符串扩展。 "${array[@]:offset:length}" 获取从 offset 开始的 length 元素:

#!/bin/bash

array=(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm)
g=4

for((i=0; i < ${#array[@]}; i+=g))
do
  part=( "${array[@]:i:g}" )
  echo "Elements in this group: ${part[*]}"
done

关于arrays - 你如何打破一组 n 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23747612/

相关文章:

linux - Bash 脚本 - 在引号中包装变量

c - 在 C 中用 gets 读取一个 txt 文件

c++ - 有什么办法可以避免 valarray 和数组之间的复制?

c++ - 不递归分配多维数组

linux - 使用 "Unknown command"时获取 "lftp -e"

linux - Bash:mv:指定的目标不是目录

php - 忽略 php 数组中的文件名

c - 如果满足条件,则递减数组并打印值

Bash sed 在找到的字符串之前和之后删除

bash - 在大型数据集上使用 grep 或 fgrep 循环非常慢