Я бы просто сломался и сделал бы это в Awk.
awk 'FNR==1 && (++i%50 == 0) {
if(NR>1) close p;
p = "dest_" ++j }
{ print >p }' uv_set_????????
Это создает файлы с dest_1
по dest_7
, первые 6 с 50 файлами в каждом и последний с остатком.
Закрытие предыдущего файла необходимо, потому что система позволяет Awk иметь ограниченное количество дескрипторов открытых файлов (хотя ограничение, как правило, выше 7, так что это, вероятно, не важно в вашем примере).
Размышляя вслух, просто чтобы никто не потратил время на повторение этого тупика.
Вы можете использовать xargs -L 50 cat
для объединения 50 файлов за один раз, но не существует простого способа передать новое перенаправление для стандартного вывода для каждого вызова. Вы можете попытаться обойти это с помощью чего-то вроде
# XXX Do not use: incomplete
printf '%s\n' uv_set_???????? |
xargs -L 50 sh -c 'cat "$@" > ... something' _
но я не могу придумать изящный способ каждый раз отличаться something
.