Установка:
У меня есть несколько сотен файлов, названных как-то input0.dat
, input1.dat
, ..., input150.dat
, которые мне нужно обработать с помощью команды cmd
(которая в основном объединяет содержимое всех файлов). Команда cmd
принимает в качестве первого параметра имя выходного файла, а затем список имен всех входных файлов:
./cmd output.dat input1.dat input2.dat [...] input150.dat
Проблема:
Проблема в том, что скрипт может обрабатывать только 10 файлов или около того из-за проблем с памятью (не вините меня за это). Таким образом, вместо использования bash
расширения подстановочных знаков, как
./cmd output.dat *dat
мне нужно сделать что-то вроде
./cmd temp_output0.dat file0.dat file1.dat [...] file9.dat
[...]
./cmd temp_outputN.dat fileN0.dat fileN1.dat [...] fileN9.dat
После этого я могу объединить временные выходы.
./cmd output.dat output0.dat [...] outputN.dat
Как мне написать эффективный сценарий в bash
?
Я пытался, но безуспешно, например
for filename in `echo *dat | xargs -n 3`; do [...]; done
Проблема в том, что это снова обрабатывает все файлы сразу, потому что выходные строки xargs
конкатенируются.
EDIT: Обратите внимание, что мне нужно указать имя выходного файла в качестве первого аргумента командной строки при вызове cmd
!