这类似于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
答案 0 :(得分:10)
使用子字符串扩展。从"${array[@]:offset:length}"
开始,length
会从offset
获取#!/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
个元素:
{{1}}
答案 1 :(得分:2)
kent$ array=(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll mmm)
kent$ echo "${array[@]}"|xargs -n4
aaa bbb ccc ddd
eee fff ggg hhh
iii jjj kkk lll
mmm
答案 2 :(得分:0)
这有效:
echo aaa,bbb,ccc,ddd,eee,fff,ggg,hhh,iii,jjj,kkk,lll,mmm | sed 's/,/,\n/g' | paste -d "" $(yes - | head -4 | paste -s) | sed 's/,$//g'