Agrupe linhas em um arquivo e alimente um grupo para um programa por vez

Agrupe linhas em um arquivo e alimente um grupo para um programa por vez

Eu tenho um programa que usa URLs como argumentos de linha de comando e gera um arquivo PDF. Por exemplo, eu uso a substituição de comando para fornecer os URLs de entrada de um arquivourlsfile

wkhtmltopdf $(cat urlsfile) my.pdf

Em urlsfile, cada linha é um URL.

Agora eu gostaria de agrupar a cada 15 linhas urlsfilee alimentar um grupo de URLs para o programa por vez. Como posso fazer isso no bash?

Observe que é aceitável criar um arquivo PDF por 15 URLs e então mesclarei os arquivos PDF em um. Se a mesclagem puder ser feita pelo programa, melhor.

Obrigado.

Responder1

Com xargs:

xargs -a urlsfile -n 15 bash -c 'wkhtmltopdf "$@" my_$$.pdf'

ou se você xargsnão suportar -a:

cat urlsfile | xargs -n 15 bash -c 'wkhtmltopdf "$@" my_$$.pdf'

Responder2

gawk        '{ f=f " " $0} 
    NR%15==0 { print("wrhtml2pdf " f " " NR/15 ".pdf") ; f=""}' urls

e se você gostar da saída, substitua printporsystem

informação relacionada