Bash-从一个文件列表创建多个列表文件

时间:2018-11-06 10:27:13

标签: bash list for-loop

该目录包含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

有人可以提供帮助,如何如上所述创建列表吗?

3 个答案:

答案 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 = 0n的倍数,则4。) >

我使用大括号{}将var初始化和while循环放在同一环境中(否则,while将无法检索npackcr变量)。

答案 2 :(得分:0)

尝试拆分:

ls -d /*.csv | sort | split -l 4 -d

这将创建文件x01 x02 ...,最多包含4行。