Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
Em 26 de janeiro de 2013 15:08, Licio Fonseca li...@ubuntu.com escreveu: A pergunta foi sua? Eu respondi a sua duvida? Com base em que você diz que eu não li a mensagem? Com base em que o objetivo dele é mais complexo do que um for do shell pode prover. Ele quer dividir um arquivo em vários contando o número de linhas, e usou o exemplo de iterar porque foi a forma mais natural que a solução se apresentou a ele, mas quem sabe um pouco de programação e shell sabe que essa abordagem não será a mais eficiente. Você acha que fazer o script pro cara é mais construtivo do que responder a pergunta base dele? Eu apresentei a ele um script simples feito em menos de 5 minutos que não faz nenhuma checagem de erro. Se você conhece meu histórico na lista, sabe o que eu penso sobre soluções prontas. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript Deixe ele decidir o que é melhor para ele e evite mandar respostas inuteis como a sua à minha mensagem. E que tal pensar na utilidade desta sua última mensagem? Você a leu em voz alta antes de enviar. Antes eu tentava dar umas dicas de como melhor utilizar a lista, e tinha parado. Vejo então que é melhor continuar na minha. -- Humberto Fraga http://lixaonerd.wordpress.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
Licio, sugiro responder com base na mensagem inteira, e não apenas no título dela. Às vezes o ímpeto de ajudar é grande, mas uma leitura com calma evita respostas menos construtivas. Em 25/01/2013 19:01, Licio Fonseca li...@ubuntu.com escreveu: while read p; do echo $p done miseravis.txt ou for linha in $(cat miseraveis.txt); do o que vc quer fazer; done 2013/1/25 Licio Fonseca licioferna...@gmail.com for linha in $(cat miseraveis.txt); do o que vc quer fazer; done 2013/1/14 luciano de souza luchya...@gmail.com Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Licio Fonseca http://www.licio.eti.br https://profiles.google.com/liciofernando -- Licio Fonseca Ubuntu Member http://launchpad.net/~licio licio AT ubuntu.com - US:1-678-701-LICI -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
Humberto, A pergunta foi sua? Eu respondi a sua duvida? Com base em que você diz que eu não li a mensagem? Você acha que fazer o script pro cara é mais construtivo do que responder a pergunta base dele? Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript Deixe ele decidir o que é melhor para ele e evite mandar respostas inuteis como a sua à minha mensagem. 2013/1/26 Humberto Fraga xisbe...@gmail.com Licio, sugiro responder com base na mensagem inteira, e não apenas no título dela. Às vezes o ímpeto de ajudar é grande, mas uma leitura com calma evita respostas menos construtivas. Em 25/01/2013 19:01, Licio Fonseca li...@ubuntu.com escreveu: while read p; do echo $p done miseravis.txt ou for linha in $(cat miseraveis.txt); do o que vc quer fazer; done 2013/1/25 Licio Fonseca licioferna...@gmail.com for linha in $(cat miseraveis.txt); do o que vc quer fazer; done 2013/1/14 luciano de souza luchya...@gmail.com Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Licio Fonseca http://www.licio.eti.br https://profiles.google.com/liciofernando -- Licio Fonseca Ubuntu Member http://launchpad.net/~licio licio AT ubuntu.com - US:1-678-701-LICI -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Licio Fonseca Ubuntu Member http://launchpad.net/~licio licio AT ubuntu.com - US:1-678-701-LICI -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
while read p; do echo $p done miseravis.txt ou for linha in $(cat miseraveis.txt); do o que vc quer fazer; done 2013/1/25 Licio Fonseca licioferna...@gmail.com for linha in $(cat miseraveis.txt); do o que vc quer fazer; done 2013/1/14 luciano de souza luchya...@gmail.com Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Licio Fonseca http://www.licio.eti.br https://profiles.google.com/liciofernando -- Licio Fonseca Ubuntu Member http://launchpad.net/~licio licio AT ubuntu.com - US:1-678-701-LICI -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
Luciano, esse artigo deve te ajudar: http://pt.wikinourau.org/bin/view/GrupoLinux/SlideProgramacaoShellScript [3] Em 2013-01-14 11:25, luciano de souza escreveu: Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano --- Tiago Passos Analista de Suporte Linux www.tiagopassos.com [1] @tiagopassos [2] Links: -- [1] http://tiagopassos.com [2] http://twitter.com/tiagopassos [3] http://pt.wikinourau.org/bin/view/GrupoLinux/SlideProgramacaoShellScript -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
Luciano, provavelmente em um grupo de Shellscript você vai encontrar alguma ajuda mais precisa, mas vou mostrar aqui o que pude investigar com pouco tempo. No shell, você não consegue exatamente iterar pelas linhas de um arquivo. Mas é possível ler apenas determinadas linhas. Dessa forma, você vai poder usar uma variável como controle para saber em que linha você está. Fiz um script rudimentar e coloquei no pastebin: http://pastebin.com/dRDHkk90 (ele apenas tenta fazer o que você descreveu, mas não incluí nenhum teste para saber se os parâmetros fornecidos são válidos). Em 14 de janeiro de 2013 13:25, luciano de souza luchya...@gmail.comescreveu: Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Humberto Fraga http://lixaonerd.wordpress.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
O seu script é uma fonte notável de estudo. Agora já sei por quais comandos procurar a referência. Entretanto, fiquei a pensar que talvez esteja querendo utilizar o Shellscript para algo que talvez ele não seja tão bom. Pelo que entendi, o comando sed, a cada iteração, processa o arquivo inteiro. A ideia é processar livros. Imagine quantas linhas terá um livro de 700 páginas e qual será o desempenho se a cada iteração tiver de ler as 700 páginas. Neste caso, talvez seja mais eficiente partir para o Pascal. Mas independentemente disso, estudarei o script, pois o que daí se aprende não é pouco. O comando sed parece maravilhoso! Muito, muito obrigado pela atenção. Em 14/01/13, Humberto Fragaxisbe...@gmail.com escreveu: Luciano, provavelmente em um grupo de Shellscript você vai encontrar alguma ajuda mais precisa, mas vou mostrar aqui o que pude investigar com pouco tempo. No shell, você não consegue exatamente iterar pelas linhas de um arquivo. Mas é possível ler apenas determinadas linhas. Dessa forma, você vai poder usar uma variável como controle para saber em que linha você está. Fiz um script rudimentar e coloquei no pastebin: http://pastebin.com/dRDHkk90 (ele apenas tenta fazer o que você descreveu, mas não incluí nenhum teste para saber se os parâmetros fornecidos são válidos). Em 14 de janeiro de 2013 13:25, luciano de souza luchya...@gmail.comescreveu: Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Humberto Fraga http://lixaonerd.wordpress.com Sur la tuta tero estis unu lingvo kaj unu parlomaniero. - Gn 11,1 -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Luciano de Souza -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br
Re: [Ubuntu-BR] Iterando sobre arquivos com shellscript
Luciano, acho que no FPC/Lazarus tu podes fazer isso mais facilmente. É só colocar o livro pai em um TStringList e iterar as linhas deste StringList, cortando-o onde quiseres. Algo assim (não testei, na verdade estou criando a função agora mesmo): procedure Iterador_Texto (arquivo_pai: string); var sl, slaux : TStringList; seq : integer; begin seq := 1; sl := TStringList.Create; slaux := TStringList.Create; try sl.LoadFromFile(arquivo_pai + '.txt'); linha := 1; while linha sl.Count do begin {Aqui colocas o código para tratar as linhas, por exemplo, colocar em outro String List a cada 10 linhas e salvar} slaux.append(sl[linha]); if linha mod 10 = 0 then begin slaux.SaveToFile(arquivo_pai + '_' + IntToStr(seq) + '.txt'); slaux.clear; Inc(seq); end; Inc(linha); end; finally sl.Free; end; end; Se propuseres este problema na lista do Lazarus, vais ter a solução fácil, fácil. Abraços. Em 14 de janeiro de 2013 12:25, luciano de souza luchya...@gmail.comescreveu: Caros, Desejo criar um Shellscript que realize as seguintes tarefas: 1. Lê um arquivo de texto; 2. Separa-o em uma coleção de arquivos com número determinado de linhas; 3. Coloca no início de cada arquivo, o nome do arquivo-pai sem a extensão, mas seguido de um número sequencial. Este é o início para que consiga preparar um arquivo de texto para conversão em audiolivro utilizando a síntese de voz do Espeak. Suponha o seguinte comando: audiobook -i Os miseráveis.txt -s 200 Como resultado ele deveria produzir: Os miseráveis01.txt Os miseráveis02.txt Os miseráveis03.txt No início, por exemplo, de os miseráveis03.txt, teríamos: Os miseráveis03 {continuação do texto de Os miseráveis02} O que basicamente preciso saber para construir este script? Ler arquivos, linha por linha verificando se um contador é igual ao tamanho passado como parâmetro. Entretanto, não sei como iterar sobre as linhas de um arquivo utilizando Shellscript. Se fosse Pascal, seria algo mais ou menos assim: var f: text; s: string; I: integer; begin assign(f, 'Os miseráveis.txt'); reset(f) i := 0; while not eof(f) do begin readln(f, s); { Fazer alguma coisa com s} inc(i); end; close(f); end. Muito provavelmente necessitarei de um bocado de tentativas até que tenha o meu script de audiolivros pronto. O que desejo é uma orientação sobre o que estudar afim de conseguir gerar este script. Não estou certo se a minha pergunta é apropriada para este grupo, mas não conheço grupos sobre shellscript. Luciano -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br -- Prof. André Cavalcante Universidade Federal do Amazonas (UFAM) Manaus, AM., Brasil Ubuntu User number # 24370 Quer saber sobre Open Source Software? http://sobreoss.blogspot.com Quer saber mais sobre Espiritismo? http://sobreespiritismo.blogspot.com Atenção: Este e-mail pode conter anexos no formato ODF (Open Document Format)/ABNT (extensões odt, ods, odp, odb, odg). Antes de pedir os anexos em outro formato, você pode instalar gratuita e livremente o LibreOffice ( http://pt-br.libreoffice.org/). -- Mais sobre o Ubuntu em português: http://www.ubuntu-br.org/comece Lista de discussão Ubuntu Brasil Histórico, descadastramento e outras opções: https://lists.ubuntu.com/mailman/listinfo/ubuntu-br