Bash - создание нескольких списков файлов из одного списка файлов - PullRequest
0 голосов
/ 06 ноября 2018

Каталог содержит 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 элементов. Первый список должен состоять из первых 4 элементов из files, другой список должен содержать следующие 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 голосов
/ 06 ноября 2018
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
0 голосов
/ 06 ноября 2018

Пример, который может быть изобретением колеса:

\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
    }

Здесь мы используем оператор по модулю , чтобы проверить, будет ли отображаться новый пакет (n modulo 4 = 0, если n кратно 4).

Я использовал фигурные скобки {}, чтобы поместить инициализацию var и цикл while в ту же среду (в противном случае while не сможет получить переменные n, pack и cr).

0 голосов
/ 06 ноября 2018

Попробуйте разделить:

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

это создаст файлы x01 x02 ..., содержащие максимум 4 строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...