Converter em Literal
Publicado por DAVISON MARCEL PASQUALINI (última atualização em 29/11/2011)
[ Hits: 4.547 ]
Converte números em sua forma literal (ingles e portugues). ex:
./literal -p 10
dez
./literal -e 10
ten
Foi feito para atender uma necessidade de um colega do vol, mas como foi meio corrido ele está um pouco maior do que deveria ... mas funciona. Converte arquivos também.
#!/bin/bash # literal.sh # -------------------------------------- # Script Viva o Linux # -------------------------------------- # func_unidade_x () { case $dig in "0" ) saida="" ;; "1" ) saida="one" ;; "2" ) saida="two" ;; "3" ) saida="three" ;; "4" ) saida="four" ;; "5" ) saida="five" ;; "6" ) saida="six" ;; "7" ) saida="seven" ;; "8" ) saida="eight" ;; "9" ) saida="nine" ;; esac } func_dez_x () { dig_ax5=`expr $num + 2` num_1="`echo $numero | cut -c $dig_ax5`" case $dig in "0" ) saida="" ;; "1" ) func_dez1_x ;; "2" ) saida="twenty" func_dez2_x ;; "3" ) saida="thirty" func_dez2_x ;; "4" ) saida="fourty" func_dez2_x ;; "5" ) saida="fifty" func_dez2_x ;; "6" ) saida="sixty" func_dez2_x ;; "7" ) saida="seventy" func_dez2_x ;; "8" ) saida="eighty" func_dez2_x ;; "9" ) saida="ninety" func_dez2_x ;; esac } func_dez1_x () { case "$num_1" in "0" ) saida="ten" ;; "1" ) saida="eleven" ;; "2" ) saida="twelve" ;; "3" ) saida="thirteen" ;; "4" ) saida="fourteen" ;; "5" ) saida="fifteen" ;; "6" ) saida="sixteen" ;; "7" ) saida="seventeen" ;; "8" ) saida="eighteen" ;; "9" ) saida="nineteen" ;; esac avanca } func_dez2_x () { if [ "$num_1" = "0" ]; then avanca else saida="$saida -" fi } func_cem_x () { dig_ax2=`expr $num + 2` dig_ax3=`expr $num + 3` num_1="`echo $numero | cut -c $dig_ax2-$dig_ax3`" case $dig in "0" ) saida="" ;; * ) func_unidade_x saida="$saida hundred" ;; esac if [ "$num_1" = "00" ]; then avanca avanca else saida="$saida" fi } avanca () { num=`expr $num + 1` cont=`expr $cont - 1` } resolve_numero_x () { case $cont in "0" ) ;; "1" ) func_unidade_x ;; "2" ) func_dez_x ;; "3" ) if [ "$numero" -eq "1000" ]; then texto="$texto thousand" elif [ "$numero" -gt "1000" ]; then texto="$texto thousands" fi func_cem_x saida="$saida" ;; "4" ) func_unidade_x ;; "5" ) func_dez_x ;; "6" ) func_cem_x if [ "$numero" -eq "1000000" ]; then texto="$texto million" elif [ "$numero" -gt "1000000" ]; then texto="$texto millions" fi ;; "7" ) func_unidade_x ;; "8" ) func_dez_x ;; "9" ) func_cem_x ;; * ) clear echo "ERROR: Number $numero exceded script max number (999.999.999)!" ;; esac } principal_x () { cont_x=`echo $numero | wc -c` cont=`expr $cont_x - 1` until [ "$cont" -le 0 ] do dig_ax1=`expr $num + 1` dig="`echo $numero | cut -c $dig_ax1`" resolve_numero_x avanca if [ "$texto" = "" ]; then texto="$saida" else texto="$texto $saida" fi done } #-------------------------fim----- func_unidade () { case $dig in "0" ) saida="" if [ "$numero" -eq 0 ]; then saida="zero" fi ;; "1" ) saida="um" ;; "2" ) saida="dois" ;; "3" ) saida="tres" ;; "4" ) saida="quatro" ;; "5" ) saida="cinco" ;; "6" ) saida="seis" ;; "7" ) saida="sete" ;; "8" ) saida="oito" ;; "9" ) saida="nove" ;; esac } func_dez () { dig_ax2=`expr $num + 2` num_1="`echo $numero | cut -c $dig_ax2`" case $dig in "0" ) saida="" ;; "1" ) func_dez1 ;; "2" ) saida="vinte" func_dez2 ;; "3" ) saida="trinta" func_dez2 ;; "4" ) saida="quarenta" func_dez2 ;; "5" ) saida="cinquenta" func_dez2 ;; "6" ) saida="sessenta" func_dez2 ;; "7" ) saida="setenta" func_dez2 ;; "8" ) saida="oitenta" func_dez2 ;; "9" ) saida="noventa" func_dez2 ;; esac } func_dez1 () { case "$num_1" in "0" ) saida="dez" ;; "1" ) saida="onze" ;; "2" ) saida="doze" ;; "3" ) saida="treze" ;; "4" ) saida="quatorze" ;; "5" ) saida="quinze" ;; "6" ) saida="dezesseis" ;; "7" ) saida="dezessete" ;; "8" ) saida="dezoito" ;; "9" ) saida="dezenove" ;; esac avanca } func_dez2 () { if [ "$num_1" = "0" ]; then avanca else saida="$saida e" fi } func_cem () { dig_ax6=`expr $num + 1` dig_ax3=`expr $num + 2` dig_ax4=`expr $num + 3` num_1="`echo $numero | cut -c $dig_ax3-$dig_ax4`" num_1x="`echo $numero | cut -c $dig_ax6-$dig_ax4`" cont1_x=`echo $numero | wc -c` cont1=`expr $cont1_x - 1` case $dig in "0" ) saida="" ;; "1" ) if [ "$num_1" = "00" ]; then saida="cem" else saida="cento" fi ;; "2" ) saida="duzentos" ;; "3" ) saida="trezentos" ;; "4" ) saida="quatrocentos" ;; "5" ) saida="quinhentos" ;; "6" ) saida="seiscentos" ;; "7" ) saida="setecentos" ;; "8" ) saida="oitocentos" ;; "9" ) saida="novecentos" ;; esac if [ "$num_1" = "00" ]; then avanca avanca else saida="$saida e" fi } avanca () { num=`expr $num + 1` cont=`expr $cont - 1` } resolve_numero () { case $cont in "0" ) ;; "1" ) func_unidade ;; "2" ) func_dez ;; "3" ) func_cem if [ "$num_1x" -gt "1" -a "$cont1" -gt "3" ]; then saida="e $saida" fi ;; "4" ) func_unidade if [ "$cont" = "4" -a "$dig" -gt 0 ]; then saida="$saida mil" fi ;; "5" ) func_dez if [ "$num_1" = "0" -a "$dig" -gt "0" ]; then saida="$saida mil" elif [ "$dig" = "1" ]; then saida="$saida mil" fi ;; "6" ) func_cem if [ "$num_1" = "00" -a "$dig" -gt "0" ]; then saida="$saida mil" fi if [ "$num_1x" -gt "1" -a "$cont1" -gt "6" ]; then saida="e $saida" fi ;; "7" ) func_unidade if [ "$cont" = "7" -a "$dig" = 1 -a "$ml" != 1 ]; then saida="$saida milhco" else saida="$saida milhoes" fi ;; "8" ) func_dez if [ "$num_1" = "0" ]; then saida="$saida milhoes" elif [ "$dig" = "1" ]; then saida="$saida milhoes" fi if [ "$dig" -gt "0" ]; then ml=1 fi ;; "9" ) func_cem if [ "$num_1" = "00" ]; then saida="$saida milhoes" fi if [ "$dig" -gt "0" ]; then ml=1 fi ;; * ) clear echo "ERROR: Numero $numero excedeu o valor maximo do script (999.999.999)!" exit 0 ;; esac } principal () { cont_ax=`echo $numero | wc -c` #echo "DEBUG: cont_ax" #echo "DEBUG: $cont_ax" cont=`expr $cont_ax - 1` #echo "DEBUG: cont" #echo "DEBUG: $cont" until [ "$cont" -le 0 ] do #echo "DEBUG: num" #echo "DEBUG: $num" dig_ax=`expr $num + 1` #echo "DEBUG: dig_ax" #echo "DEBUG: $dig_ax" dig="`echo $numero | cut -c $dig_ax`" resolve_numero avanca if [ "$texto" = "" ]; then texto="$saida" else texto="$texto $saida" fi done } #-------------------------fim----- help () { clear echo " User Commands literal(1) `tput bold`NAME`tput sgr0` literal - traduz numeros para sua representacao por extenso. `tput bold`SYNOPSIS`tput sgr0` literal [opcao][numero] [-f] [nome_do_arquivo] `tput bold`DESCRIPTION`tput sgr0` Converte numeros em sua representacao por extenso. Valor limitado a 999999999. `tput bold`OPTIONS`tput sgr0` The following options are supported: -p - numeros em portugues. -e - numeros em ingles. -v - imprime o numero entre parenteses apos a sua forma por extenso. -f - define arquivo de entrada. Examples: literal -p 1000 literal -e 200 literal -pv 100 literal -p -f arquivo_entrada literal -ev -f arquivo_entrada > arquivo_de_saida `tput bold`ALERT`tput sgr0` A conversco podera alterar a formatacao do arquivo. `tput bold`VERSION`tput sgr0` Version is 1.01 `tput bold`BUG REPORT`tput sgr0` dmarp@ig.com.br " exit 0 } le_arquivo () { frase="" cat $arquivo | sed 's/\*/#_asterisco_flag/'g | while read line do num=0 le2 echo "$frase" | sed 's/#_asterisco_flag/\*/'g frase="" done } le2 () { for i in `echo $line | xargs -n 1`; do expr $i / 1 2>>/dev/null 1>>/dev/null if [ $? = 0 ]; then numero="$i" le_arquivo_1 # mudei if [ "$opcao" = '-vp' ]; then i="$numero ($texto)" elif [ "$opcao" = '-pv' ]; then i="$texto ($numero)" elif [ "$opcao" = '-ve' ]; then i="$numero ($texto)" elif [ "$opcao" = '-ev' ]; then i="$texto ($numero)" else i="$texto" fi texto="" num=0 fi if [ "$frase" = "" ]; then frase="$i" else frase="$frase $i" fi; done } le_arquivo_1 () { if [ "$opcao" = '-p' ]; then principal elif [ "$opcao" = '-e' ]; then principal_x elif [ "$opcao" = '-pv' ]; then principal elif [ "$opcao" = '-vp' ]; then principal elif [ "$opcao" = '-ev' ]; then principal_x elif [ "$opcao" = '-ve' ]; then principal_x else help exit 0 fi } num=0 cont_ax=0 dig_ax=0 dig_ax1=0 dig_ax2=0 dig_ax3=0 dig_ax4=0 dig_ax5=0 opcao=$1 numero="$2" if [ "$2" = '-f' ]; then arquivo="$3" le_arquivo elif [ "$1" = '-p' ]; then principal echo $texto elif [ "$1" = '-e' ]; then principal_x echo $texto elif [ "$1" = '-pv' ]; then principal echo "$texto ($numero)" elif [ "$1" = '-vp' ]; then principal echo "$numero ($texto)" elif [ "$1" = '-ev' ]; then principal_x echo "$texto ($numero)" elif [ "$1" = '-ve' ]; then principal_x echo "$numero ($texto)" else help exit 0 fi
Gerenciamento de usários do Squid usando Dialog
Script de instalação do Hamachi
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (2)
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta