1

У меня есть вывод, который печатает элемент в каждой строке. Я хочу иметь возможность анализировать этот вывод в кусках N, даже если число строк не кратно N.

find . -f | chunk 10 1 # shows first chunk of size 10 
find . -f | chunk 10 2 # second chunk of size 10
find . -f | chunk 10 3 # last of size < n 
find . -f | chunk 10 4 # does nothing 

1 ответ1

1

Ваша функция чанка может быть реализована в bash следующим образом.

chunk(){
    size=$1
    n=$2

    firstline=$((n*size))
    i=0
    while [ $i -lt $firstline ]
    do
        read -r junk || return
        i=$((i+1))
    done
    i=0
    while [ $i -lt $size ]
    do
        read -r str || return
        printf "%s\n" "$str"
        i=$((i+1))
    done
}

Обратите внимание, что результаты могут быть неожиданными, если файлы добавляются между вызовами для find . Итак, вы можете захотеть реализовать API save_chunks/get_chunk вместо запрошенного или сделать что-то вроде:

catn(){
    i=0
    while [ $i -lt $1 ] && read -r s
    do printf "%s\n" "$s";i=$((i+1))
    done
}
find -f . | 
    (catn 10; # shows first chunk of size 10 
     catn 10; # second chunk of size 10
     catn 10; # last of size < n 
     catn 10) # does nothing 

Это также должно быть быстрее.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .