Работа со строками и передача их в bash

Посетите веб-сайт пакетов Ubuntu , например. gcc для 18.04 .

-3
01.08.2020, 11:02
3 ответа

Использование любого 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 пакетов.

0
18.03.2021, 23:15

Нет необходимости в оболочке для выполнения команд. Вы можете сделать все это с perlкак:

perl -ne '
  for (/\bpackage\w+\b/g) {
    system "./builder", "make${_}Main";
    system "./builder", "cleancache" unless ++$n % 30
  }' input-file
3
18.03.2021, 23:15

Сделано и протестировано 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'
0
18.03.2021, 23:15

Теги

Похожие вопросы