Скрипт Bash для разделения файла на n файлов, каждый из которых содержит х записей - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть требование, когда мне нужно написать скрипт bash, чтобы разбить один входной файл на n файлов, и каждый файл должен содержать не более x записей (за исключением последнего файла, который будет иметь последний файл).все остальное).Значения 'n' и 'x' будут переданы в сценарий в качестве аргументов пользователем.

n должно быть общим количеством разделенных файлов

x должно быть максимальным количеством записейв разделенном файле (кроме последнего файла).

Предположим, что если во входном файле имеется 5000 записей, а пользователь передает значения аргументов n и x как 3 и 1000, то файлы 1 и 2 должны содержать по 1000 записей каждыйи файл 3 должен содержать 3000 записей.Другой пример: если во входном файле 4000 записей, а пользователь передает значения аргументов n и x как 2 и 3000, тогда файл 1 должен содержать 3000 записей, а файл 2 должен содержать 1000 записей.

Я пробовалКоманда ниже:

split -n$maxBatch -l$batchSize --numeric-suffixes $fileDir/$nzbnListFileName $splitFileName

Но выдает ошибку, что разделение не может быть выполнено несколькими способами.

Пожалуйста, сообщите.

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

Похоже, что разделения не достаточно для ваших требований - он может создавать файлы по X строк или по N файлов, но не комбинацию.Попробуйте что-то вроде этого:

awk -v prefix=$splitFileName -v lines=$x -v maxfiles=$n '
 (NR - 1) % lines == 0 && fileno < maxfiles { fileno +=1 }
 { print >> prefix fileno }' input.txt

Это увеличивает счетчик каждые X строк до N раз и записывает строки в файл, имя которого зависит от счетчика.

0 голосов
/ 17 декабря 2018

вам нужно либо указать параметр -n, либо параметр -l.не оба из них вместе.

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