Se eu fosse fazer um programa para rodar em sempre em um pc, sempre com a mesma resolução e com a janela maximizada o \t resolveria o problema, mas como tenho que pensar quer a pessoa poderá rodar o programa de qualquer pc, com qualquer resolução e tamanho de janela, ai ele não serve Veja só um exemplo bem simples: Maximiza a sua janela e dispara esse comando: printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ÁÁAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBB AAAAAAAAAA BB AAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBB AAAAAAAAAA BBBBBB AAAAAAA BBBB
Agora deixa ela de um tamanho médio e dispara o mesmo comando de novo. Você vai ver que ele vai dar a saída em duas linhas, dessa forma já estragaria a lista. Veja o que aconteceria com esse outro comando em tela grande mesmo: printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ÁÁAAAAAAAAAAAAAAAAAAAAAAA BBBBBBBBB AAAAAAAAAA BB AAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBB;printf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n" ÁÁAAA BBBBBBBBBBBBBBBBBBBB AAAAAAAAAA BB AAAAAAAAAAAAAA BBBBBBBBBBBBBBBBBBBBBBBBBBB As colunas vão ficar desalinhadas pois o primeiro campo é maior que um \t(tab), dai vc poderia dizer para eu truncar cada saída a um tamanho X que fosse um pouco menor que um tab, certo? Mas ai o que aconteceria seria que se a tela estivesse muito pequena possivelmente o printf imprimiria as informações em 2 ou mais linhas e caso a janela estivesse grande ele exibiria vários compos com informação truncada sendo que teria espaço sobrando, dessa forma não vejo como utilizar um \t Se vc voltar no ultimo e-mail que mandei para o Júlio vc verá que eu não uso um espaçamento fixo, só dei o exemplo com 10 para ficar simples de reproduzi-lo, eu na verdade com o tput capturo o numero de colunas disponíveis na tela, divido pelo numero de colunas que irei usar em minha lista(No caso são 7) pego esse numero e utilizo como espaçamento para a listagem e ainda pego novamente esse numero e subtraio - 3 e utilizo para truncar as informações, dessa forma o espaçamento sempre se adaptará da melhor maneira possível ao tamanho da tela e sempre teremos no mínimo 3 casas separando as colunas. O que eu ainda não entendo é como tratar os acen...@! Ederson Almeida escreveu: > > OK! To brigando aqui para achar uma solução, agora lhe pergunto, o que > interfere você trocar o espaçamento fixo definido em -10 por um TAB(ou > o que imagino o \t fazer)? > > "%-10s%-10s\ n" A B;printf "%-10s%-10s\ n" Á B > A----------B > Á---------B > > printf "%s\t\t%s\n" A B;printf "%s\t\t%s\n" Á B > A B > Á B > > Att, > > Ederson Dantas de Almeida. > > --- Em ter, 20/4/10, Lawrence Waclawiak <lawrencebbw@ yahoo.com. br > <mailto:lawrencebbw%40yahoo.com.br>> escreveu: > > De: Lawrence Waclawiak <lawrencebbw@ yahoo.com. br > <mailto:lawrencebbw%40yahoo.com.br>> > Assunto: Re: [shell-script] AJuda com a formatação do printf quando > com palavras que possuam acento. > Para: shell-script@ yahoogrupos. com.br > <mailto:shell-script%40yahoogrupos.com.br> > Data: Terça-feira, 20 de Abril de 2010, 14:25 > > Fala Mestre Júlio! > > Então Júlio, na verdade eu tava bem contente com a solução que arrumei > para o trunk, vc viu o programa então lembra que o que eu precisava era > pegar várias variáveis que possuem informações a cerca de usuários e > imprimir em forma de uma lista com 7 colunas. > Eu já tinha lido a pagina 225 e vi que com o printf da pra fazer o trunk > usando %."Num"s, porém eu não consegui juntar esse trunk com a > formatação da tabulação usando %-"Num"s com o complicante que minha > tabulação tem de ser relativa ao numero de colunas capturado pelo tput, > então fiz separado, a tabulação direto pelo printf e usei expansão de > variáveis para truncar a variável em si. > O resultado que obtive foi excelente, deu certinho, mesmo que deixe a > tela minúscula ele mantem o alinhamento das colunas e trunca o conteúdo > delas. > Veja como ficou: > > COLUNAS=`tput cols` > > TAB=$(($COLUNAS / 7)) > > printf > "%-"$TAB"s%- "$TAB"s%- "$TAB"s%- "$TAB"s%- "$TAB"s%- "$TAB"s%- "$TAB"s\n" > "${USER:0:$[ $TAB - 3]}" "${NOMECOMPLETO: 0:$[$TAB - 3]}" > "${GRUPO:0:$ [$TAB - 3]}" "${STATUS:0: $[$TAB - 3]}" "${LPROFILE: > 0:$[$TAB > - 3]}" "${LHOME:0:$ [$TAB - 3]}" "${LASTMOD:0: $[$TAB - 3]}" > > Mas isso é problema passado, o meu problema é relativo á acentuação, me > parece que o printf não gosta muito dela e é bem simples para vc ver o > que eu to falando sem ter de usar esse monte de comandos ai, basta abrir > o bash e colar o comando: > printf "%-10s%-10s\ n" A B;printf "%-10s%-10s\ n" Á B > A----------B > Á---------B > > Obs:Eu substitui os espaços em branco por "-" pois nossa lista de e-mail > remove os espaços em branco duplicados. > O que vc pode ver é que quando usei A e B sem acentos foi respeitado o > espaçamento de 10 casas entre elas, porém quando acentuei o Á passei a > ter apenas 9 casas entre Á e B na saída, esse que é meu problema e para > cada letra acentuada impressa o printf come uma casa, veja esse outro > exemplo mais drástico: > > printf "%-10s%-10s\ n" AAAAAA BBBBBB;printf "%-10s%-10s\ n" ÁÁÁÁAA BBBBBB > AAAAAA----BBBBBB > ÁÁÁÁAABBBBBB > Nesse exemplo usei 4 Á e dessa forma o printf comeu 4 casa e colou os > AAs nos BBs > > E ai, pra essa eu não achei resposta no livro, se bem que tbm não deu > pra ler tudo ainda mas por consulta não achei. > > Help-me?? > > Julio C. Neves escreveu: > > > > Fala Law, > > eu te pedi para ler a seção correspondente ao printf e, pelo visto, > vc não > > leu e, por isso, está montando um Frankstein. Vou ser mais > específico, mas > > não vou te dar a resposta: leia pelo menos a página 225 que vc verá como > > truncar. > > > > Abraços, > > Julio > > Cursos de Shell e Zenity em 2 fins de semana? > > - Aracaju turma de Shell em 12/05 - andersonrizada@ gmail.com > <mailto:andersonrizada%40gmail.com> > > <mailto:andersonriz ada%40gmail. com>; > > - RJ turma de Shell em 14/06 - ligue (21)2210-6061; > > - Turmas fechadas em outras cidades ligue (21) 8112-9988. > > > > Em 19 de abril de 2010 18:52, Lawrence Waclawiak > > <lawrencebbw@ yahoo.com. br <mailto:lawrencebbw%40yahoo.com.br> > <mailto:lawrencebbw %40yahoo. com.br>>escreveu : > > > > > O problema de trucar eu já resolvi utilizando expansão de variáveis da > > > seguinte forma: > > > > > > TAB=23;printf "%-$[TAB]s%- $[TAB]s\n" "${NOMECOMPLETO: 0:$[$TAB - 1]}" > > > "${GRUPO:0:$ [$TAB - 1]}" > > > Dessa forma a saida sempre é truncada com o tamanho da TAB - 1 > > > > > > Mas persiste o problema principal referente à acentuação. > > > > > > ALguém tem mais alguma idéia ? > > > > > > > > > > > > Lawrence Waclawiak escreveu: > > > > Opa. > > > > Seguinte, o liguagem está em en_US.UTF-8 > > > > troquei a liguagem no script para pt_BR.UTF-8 mas não adiantou nada. > > > > Você chegou a testar ai no seu pc se o desalinhamento ocorre? > > > > > > > > > > > > Bruno Gunter escreveu: > > > > > > > >> Que tal usar UTF-8? > > > >> Deve resolver teu problema. > > > >> > > > >> Para confirmar se você está usando o UTF-8, faça: > > > >> > > > >> set | grep UTF > > > >> > > > >> Que deve retornar algo como: > > > >> GDM_LANG=pt_ BR.UTF-8 > > > >> LANG=pt_BR.UTF- 8 > > > >> > > > >> []'s > > > >> Gunter > > > >> > > > >> Em 19 de abril de 2010 17:36, Lawrence Waclawiak > > > >> <lawrencebbw@ yahoo.com. br <mailto:lawrencebbw%40yahoo.com.br> > <mailto:lawrencebbw %40yahoo. com.br> > > <mailto:lawrencebbw %40yahoo. com.br<lawrenceb bw%2540yahoo. com.br> > > > >>escreveu: > > > >> > > > >> > > > >>> Galera, vi que aki parece alinhado, deve ser alguma coisa do > > e-mail mas > > > >>> não fica alinhado no bash. > > > >>> Tem de jogar o comando no Bash pra ver. > > > >>> > > > >>> Lawrence Waclawiak escreveu: > > > >>> > > > >>>> E ai galera? na Paz? > > > >>>> Venho pedir a ajuda dos caros colegas com relação ao comando > > printf. > > > >>>> > > > >>>> No meu trabalho eu estou desenvolvendo um script para comptrolar > > > >>>> > > > >> um PDC > > > >> > > > >>>> em samba e para as funções de pesquisa e listagem de usuários eu > > > >>>> > > > >> utilizo > > > >> > > > >>>> o printf para formatar a saida, juntamente com o tput para > > calcular as > > > >>>> colular e consegquentemente o espaçamento necessário entre elas. > > > >>>> > > > >>>> O problema que estou enfrentando é que quando imprimo alguma > > > >>>> > > > >> string que > > > >> > > > >>>> possua acento o printf puxa a formatação uma casa para esquerda > > nessa > > > >>>> respectiva linha para cada caracter acentuado, detonando a > > > >>>> > > > >> formatação da > > > >> > > > >>>> lista. > > > >>>> > > > >>>> O exemplo abaixo mostra o que estou falando > > > >>>> > > > >>>> [r...@proxyp15 samba]# TAB=23;printf "%-$[TAB]s%- $[TAB]s\n" > > "ÁÁAAAA" > > > >>>> "BBBB"; printf "%-$[TAB]s%- $[TAB]s\n" "AAAAAA" "BBBB" > > > >>>> ÁÁÁAAA BBBB > > > >>>> AAAAAA BBBB > > > >>>> [r...@proxyp15 samba]# TAB=23;printf "%-$[TAB]s%- $[TAB]s\n" > > "ÁAAAAA" > > > >>>> "BBBB"; printf "%-$[TAB]s%- $[TAB]s\n" "AAAAAA" "BBBB" > > > >>>> ÁAAAAA BBBB > > > >>>> AAAAAA BBBB > > > >>>> [r...@proxyp15 samba]# TAB=23;printf "%-$[TAB]s%- $[TAB]s\n" > > "AAAAAA" > > > >>>> "BBBB"; printf "%-$[TAB]s%- $[TAB]s\n" "AAAAAA" "BBBB" > > > >>>> AAAAAA BBBB > > > >>>> AAAAAA BBBB > > > >>>> [r...@proxyp15 samba]# > > > >>>> > > > >>>> Só pra constar já tentei colocar o AAAAAA sem aspas, com aspas > > duplas > > > >>>> como está no exemplo e com aspas simples tbm, dá tudo na mesma, > > sai do > > > >>>> alinhamento. > > > >>>> Não caso eu não encontre uma solução irei partir para passar o TR > > > >>>> removendo os acentos de tudo, mas como se trata de Nomes > > preferia não > > > >>>> fazer isso. > > > >>>> Já aproveitando a deixa se alguém souber como faço para truncar o > > > >>>> > > > >> número > > > >> > > > >>>> de caracteres de uma variável impressa pelo printf seria de > grande > > > >>>> > > > >> ajuda > > > >> > > > >>>> tbm. > > > >>>> > > > >>>> Grato, > > > >>>> Lawrence Waclawiak > > > >>>> > > > >>>> > > > >>>> > > > >>> > > > >>> > > > >>> ------------ --------- --------- ------ > > > >>> > > > >>> ------------ --------- --------- --------- --------- --------- - > > > >>> Esta lista não admite a abordagem de outras liguagens de > > > >>> > > > >> programação, como > > > >> > > > >>> perl, C etc. Quem insistir em não seguir esta regra será moderado > > > >>> > > > >> sem prévio > > > >> > > > >>> aviso. > > > >>> ------------ --------- --------- --------- --------- --------- - > > > >>> Sair da lista: shell-script- unsubscribe@ yahoogrupos. com.br > <mailto:shell-script-unsubscribe%40yahoogrupos.com.br> > > <mailto:shell- script-unsubscri be%40yahoogrupos .com.br> > > > >>> > > > >> > > <mailto:shell- script-unsubscri be%40yahoogrupos .com.br<shell- > script-unsubscri be%2540yahoogrup os.com.br> > > > > > > > >> > > > >>> ------------ --------- --------- --------- --------- --------- - > > > >>> Esta lista é moderada de acordo com o previsto em > > > >>> http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net> > > <http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net>> > > > >>> > > > >> <http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net> > > <http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net>>> > > > >> > > > >>> ------------ --------- --------- --------- --------- --------- - > > > >>> Servidor Newsgroup da lista: news.gmane.org > > > >>> Grupo: gmane.org.user- groups.programmi ng.shell. brazil > > > >>> > > > >>> Links do Yahoo! Grupos > > > >>> > > > >>> > > > >>> [image: InfoLink - Hospedagem de Sites] > > > >>> > > > >> *Bruno Gunter* > > > >> Equipe InfoLink Hospedagem > > > >> gun...@infolink. com.br <mailto:gunter%40infolink.com.br> > <mailto:gunter% 40infolink. com.br> > > <mailto:gunter% 40infolink. com.br<gunter% 2540infolink. com.br> > > > > > > > >> <gun...@infolink. com.br <mailto:gunter%40infolink.com.br> > <mailto:gunter% 40infolink. com.br> > > <mailto:gunter% 40infolink. com.br<gunter% 2540infolink. com.br> > > > >> > > > >> www.infolink. com.br > > > >> Tel.: 2104-1932 > > > >> > > > >> [As partes desta mensagem que não continham texto foram removidas] > > > >> > > > >> > > > >> > > > > > > > > > > > > > > > > > > > > ------------ --------- --------- ------ > > > > > > > > ------------ --------- --------- --------- --------- --------- - > > > > Esta lista não admite a abordagem de outras liguagens de > programação, > > > como perl, C etc. Quem insistir em não seguir esta regra será > > moderado sem > > > prévio aviso. > > > > ------------ --------- --------- --------- --------- --------- - > > > > Sair da lista: shell-script- unsubscribe@ yahoogrupos. com.br > <mailto:shell-script-unsubscribe%40yahoogrupos.com.br> > > <mailto:shell- script-unsubscri be%40yahoogrupos .com.br> > > > > ------------ --------- --------- --------- --------- --------- - > > > > Esta lista é moderada de acordo com o previsto em > > > http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net> > > <http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net>> > > > > ------------ --------- --------- --------- --------- --------- - > > > > Servidor Newsgroup da lista: news.gmane.org > > > > Grupo: gmane.org.user- groups.programmi ng.shell. brazil > > > > > > > > Links do Yahoo! Grupos > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ------------ --------- --------- ------ > > > > > > ------------ --------- --------- --------- --------- --------- - > > > Esta lista não admite a abordagem de outras liguagens de > > programação, como > > > perl, C etc. Quem insistir em não seguir esta regra será moderado > > sem prévio > > > aviso. > > > ------------ --------- --------- --------- --------- --------- - > > > Sair da lista: shell-script- unsubscribe@ yahoogrupos. com.br > <mailto:shell-script-unsubscribe%40yahoogrupos.com.br> > > <mailto:shell- script-unsubscri be%40yahoogrupos .com.br> > > > ------------ --------- --------- --------- --------- --------- - > > > Esta lista é moderada de acordo com o previsto em > > > http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net> > > <http://www.listas- discussao. cjb.net > <http://www.listas-discussao.cjb.net>> > > > ------------ --------- --------- --------- --------- --------- - > > > Servidor Newsgroup da lista: news.gmane.org > > > Grupo: gmane.org.user- groups.programmi ng.shell. brazil > > > > > > Links do Yahoo! Grupos > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > ------------ --------- --------- ------ > > ------------ --------- --------- --------- --------- --------- - > Esta lista não admite a abordagem de outras liguagens de programação, > como perl, C etc. Quem insistir em não seguir esta regra será moderado > sem prévio aviso. > ------------ --------- --------- --------- --------- --------- - > Sair da lista: shell-script- unsubscribe@ yahoogrupos. com.br > <mailto:shell-script-unsubscribe%40yahoogrupos.com.br> > ------------ --------- --------- --------- --------- --------- - > Esta lista é moderada de acordo com o previsto em http://www.listas- > discussao. cjb.net <http://www.listas-discussao.cjb.net> > ------------ --------- --------- --------- --------- --------- - > Servidor Newsgroup da lista: news.gmane.org > Grupo: gmane.org.user- groups.programmi ng.shell. brazil > > Links do Yahoo! Grupos > > [As partes desta mensagem que não continham texto foram removidas] > > ------------------------------------ --------------------------------------------------------------------- Esta lista não admite a abordagem de outras liguagens de programação, como perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso. --------------------------------------------------------------------- Sair da lista: [email protected] --------------------------------------------------------------------- Esta lista é moderada de acordo com o previsto em http://www.listas-discussao.cjb.net --------------------------------------------------------------------- Servidor Newsgroup da lista: news.gmane.org Grupo: gmane.org.user-groups.programming.shell.brazil Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/shell-script/ <*> Para sair deste grupo, envie um e-mail para: [email protected] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html
