Использование любого awk в любой оболочке на каждом компьютере UNIX:
$ cat tst.awk
match($0,/package[[:alnum:]_]+/) {
sep = (cnt++ ? " ; " : "")
printf "%s./builder make%sMain", sep, substr($0,RSTART,RLENGTH)
if ( !(cnt % 2) ) {
printf "%s./builder cleancache", sep
}
}
END { print "" }
$ awk -f tst.awk file
./builder makepackageEARTHMain ;./builder makepackageMARSMain ;./builder cleancache ;./builder makepackageVENUSMain
Просто измените 2
на 30
, чтобы оператор cleancache
печатался после каждых 30, а не после каждых 2 пакетов.
Нет необходимости в оболочке для выполнения команд. Вы можете сделать все это с perl
как:
perl -ne '
for (/\bpackage\w+\b/g) {
system "./builder", "make${_}Main";
system "./builder", "cleancache" unless ++$n % 30
}' input-file
Сделано и протестировано awk
to=`awk 'END{print NR}' p.txt`
awk '{for(i=1;i<=NF;i++){if($i ~ /^package/){print "./builder " "Make"$i"Main"}}}' p.txt| awk -v to="$to" '{for(i=30;i<=to;i++){if(NR==i){$0=$0"\n./builder cleancache"}{i=i+29}}}1'