Это Сценарий Робруски немного очищен:
tail -n +2 file.txt | split -l 4 - split_
for file in split_*
do
head -n 1 file.txt > tmp_file
cat "$file" >> tmp_file
mv -f tmp_file "$file"
done
Я удалил wc
, cut
, ls
и echo
в тех местах, где они не нужны. Я изменил некоторые имена файлов, чтобы сделать их немного более значимыми. Я разбил его на несколько строк, чтобы было легче читать.
Если вы хотите получить фантазию, вы можете использовать mktemp
или tempfile
для создания временного имени файла вместо использования жестко закодированного.
Редактировать
Используя GNU split
, это можно сделать:
split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }; export -f split_filter; tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
Вычеркнуто для удобства чтения:
split_filter () { { head -n 1 file.txt; cat; } > "$FILE"; }
export -f split_filter
tail -n +2 file.txt | split --lines=4 --filter=split_filter - split_
Когда указано --filter
, split
запускает команду (в данном случае функцию, которую необходимо экспортировать) для каждого выходного файла и задает для переменной FILE
в среде команды имя файла.
Сценарий или функция фильтра могут выполнять любые манипуляции с содержимым вывода или даже с именем файла. Примером последнего может быть вывод на фиксированное имя файла в каталоге переменных: например, > "$FILE/data.dat"
.