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

0

Eu tenho um programa que usa URLs como argumentos da 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, gostaria de agrupar a cada 15 linhas urlsfilee alimentar um grupo de URLs para o programa de cada vez. Como posso fazer isso no bash?

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

Obrigado.

Tim
fonte
cat urlsfile | xargs wkhtmltopdf my.pdf não funciona, porque eu sei apenas que o programa recebe entradas do cmdline args e não sei como fazê-lo receber entradas do stdin.
Tim
Para esta aplicação particular, a documentação on-line sugere que wkhtmltopdffornece uma --read-args-from-stdinopção que pode ser útil
steeldriver

Respostas:

4

Com xargs:

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

ou se o seu xargsnão suportar -a:

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

FloHimself
fonte
Obrigado. O que $* my_$$.pdfsignifica isso ?
Tim
Obrigado @ilkkachu "$@"é o caminho certo #
FloHimself 21/16
Frescos (+1) xargs é sempre uma fonte de surpresas para mim :)
JJoao
2
gawk        '{ f=f " " $0} 
    NR%15==0 { print("wrhtml2pdf " f " " NR/15 ".pdf") ; f=""}' urls

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

JJoao
fonte