Вам потребуется выполнить 2 отдельные операции ... 1) split
файл и 2) переформатировать файлы, созданные split
.
Первый шаг уже выполнен:
split -d -l 25 large.txt file
На втором этапе давайте поработаем с результатами, которые выгружаются в первый файл командой basi c split
:
$ cat file00
host1
host2
host3
...
host25
Мы хотим вывести эти строки в одна строка с запятой (,
) в качестве разделителя. В этом примере я буду использовать решение awk
:
$ cat file00 | awk '{ printf "%s%s", sep, $0 ; sep="," } END { print "" }'
host1,host2,host3...,host25
Где:
sep
изначально не определено (также называется пустой строкой) - на каждой последующей строке, обрабатываемой
awk
, мы устанавливаем sep
в запятую printf
не включает перевод строки (\n
), поэтому каждый последующий printf
будет добавляться к 'первому 'строка вывода - мы
END
сценарий путем печати перевода строки в конец файла
Так уж случилось, что split
имеет возможность вызвать вторичный сценарий / фрагмент кода, позволяющий настраивать формат вывода (генерируется split
); вариант - --filter
. Следует иметь в виду несколько моментов:
- начальный вывод из
split
(эффективно) передается по конвейеру как ввод для команды, указанной в опции --filter
- это необходимо для экранирования (с помощью backsla sh) определенных символов в команде (например, двойных кавычек, знака доллара), чтобы они не интерпретировались командой
split
- опция
--filter
автоматически имеет доступ к текущему имени split
файла с использованием переменной $FILE
Собирая все вместе, мы получаем:
$ split -d -l 25 --filter="awk '{ printf \"%s%s\", sep, \$0 ; sep=\",\" } END { print \"\" }' > \$FILE" large.txt file
$ cat file00
host1,host2,host3...,host25