该目录包含x
个文件。我得到文件列表。我想将此列表拆分为大量的n
列表,这些列表将包含有限数量的元素。
示例:
files=$( ls -d /*.csv | sort )
echo $files
/100347_111111.csv
/111301_111111.csv
/111301_222222.csv
/256467_111111.csv
/256467_222222.csv
/256467_333333.csv
/256467_444444.csv
/256467_555555.csv
/256467_666666.csv
/256467_777777.csv
从结果列表中,我想创建3个列表。列表中的元素不得超过4个。第一个列表应由files
中的前4个元素组成,另一个列表应包含以下4个元素,第三个列表应包含其余元素。
n1
/100347_111111.csv
/111301_111111.csv
/111301_222222.csv
/256467_111111.csv
n2
/256467_222222.csv
/256467_333333.csv
/256467_444444.csv
/256467_555555.csv
n3
/256467_666666.csv
/256467_777777.csv
有人可以提供帮助,如何如上所述创建列表吗?
答案 0 :(得分:1)
FILES=( `ls -d * | sort`)
echo "${FILES[@]:0:4}"
4圈
count=4
for i in $(seq 0 $(( ${#FILES[@]}/$count - 1 ))) ;
do
echo "######## Set" $i "#######";
echo "${FILES[@]:$(( i * $count )):$count }" ;
done
答案 1 :(得分:1)
一个可能正在重新发明轮子的例子:
\ls -1 |
{
n=0
cr=""
pack=1
while read -r l
do
mod=$(($n % 4))
if [[ "$mod" == "0" ]]
then
echo -e "$cr"n"$pack:"
fi
echo $l
n=$((n + 1))
pack=$((pack + 1))
cr="\n";
done
}
在这里,我们使用modulo运算符检查是否将要显示新包(如果n modulo 4 = 0
是n
的倍数,则4
。) >
我使用大括号{}
将var初始化和while循环放在同一环境中(否则,while
将无法检索n
,pack
和cr
变量)。
答案 2 :(得分:0)
尝试拆分:
ls -d /*.csv | sort | split -l 4 -d
这将创建文件x01 x02 ...,最多包含4行。