Script Para Formatação de Texto Com Cabeçalho, Rodapé e Campos de Dados Originados de Arquivo em AWK
Publicado por Perfil removido (última atualização em 31/07/2012)
[ Hits: 7.484 ]
Download 1343706392.format001.awk (versão 2)
Este script faz uma coisa relativamente simples:
- recebe um arquivo com linhas de texto;
- separa as primeiras linhas como uma espécie de cabeçalho, conforme recebidas;
- as linhas seguintes são agrupadas de n em n linhas numa única mesma linha;
- deixa as últimas linhas sem serem agrupadas, como um rodapé;
Deve ser habilitada a execução com "chmod +x ./format001.awk"
$ ./format001.awk -v header=nnn1 -v footer=nnn2 -v step=nnn3 <arquivo>
ou
$ ./format001.awk --assign=header=nnn1 --assign=header=footer=nnn2 --assign=header=step=nnn3 <arquivo>
Onde:
- header: quantidade de primeiras linhas chamadas aqui como cabeçalho;
- footer: quantidade de últimas linhas chamadas aqui como rodapé;
- step: quantidade de linhas a serem unidas numa mesmo linha a cada vez;
Há possíveis variações, como não agrupar apenas as últimas linhas, apenas que não puderem completar o número de linhas máximo permitido numa linha criada na saída do programa.
Não consegui ainda descobrir como o script pode detectar que não há um arquivo de entrada. Se não houver nome de arquivo, ele entra em loop saindo apenas com Ctrl+C ou semelhante.
Porém há outra situação em que a entrada não possui um nome de arquivo e que o script recebe via pipe "|", por exemplo.
Nos dois casos, redirecionamento e estar sem nome de arquivo de entrada mesmo, o AWK interpreta o nome do arquivo de entrada como o caractere "-".
Como saber em qual caso "-" é um pipe e em qual caso é uma falha?
Fora isto talvez haja um caso ou outro não-previsto de falha na passagem de parâmetros sem tratamento de erro pelo script.
Versão 2 - Enviado por euteste da silva em 31/07/2012
Changelog: Modificações na entrada de dados e no if(!$0)
Download 1343706392.format001.awk
#!/usr/bin/awk -f ################################################################################ # # Deve ser habilitada a execucao com "chmod +x ./format001.awk" # O nome do programa deve ser alterado no codigo em caso de ser renomeado. # # Uso: # # $ ./format001.awk -v header=nnn1 -v footer=nnn2 -v step=nnn3 <arquivo> # ou $ ./format001.awk --assign=header=nnn1 --assign=header=footer=nnn2 --assign=header=step=nnn3 <arquivo> # # -v eh opcao para passar valores a variaveis de script por linha de comando # --assign eh equivalente a opcao -v # # * header eh o numero de linhas de cabecalho # * footer eh o numero de linhas de rodape # * step eh o numero de linhas a ser escrito como unica linha antes de uma quebra de linha # # nnn1, nnn2, nnn3 sao valores numericos diferentes a serem passados # <arquivo> eh o arquivo a ser formatado pelo script # # Em caso de omissao de um dos valores, o dafault eh 0. # # # ################################################################################ BEGIN { if (header=="") header = 0; if (footer=="") footer = 0; if (step=="") step = 0; h_=header; f_=footer; s_=step; gsub(/[[:digit:]]/,"",h_); gsub(/[[:digit:]]/,"",f_); gsub(/[[:digit:]]/,"",s_); if (h_ || f_ || s_) { print "\n\tErro: uma das variaveis eh negativa ou eh um numero.\n\n\tUso:\n\n\ $ ./format001.awk -v header=nnn1 -v footer=nnn2 -v step=nnn3 <arquivo>\n\ ou $ ./format001.awk --assign=header=nnn1 --assign=footer=nnn2 --assign=step=nnn3 <arquivo>\n\n\ -v eh opcao para passar valores a variaveis de script por linha de comando\n\ --assign eh equivalente a opcao -v\n\n\ * header eh o numero de linhas de cabecalho\n\ * footer eh o numero de linhas de rodape\n\ * step eh o numero de linhas a ser escrito como unica linha antes de uma quebra de linha\n\n\ nnn1, nnn2, nnn3 sao valores numericos diferentes a serem passados\n\ <arquivo> eh o arquivo a ser formatado pelo script\n\n\ Em caso de omissao de um dos valores, o dafault eh 0.\n"; exit; } } { if (!$0) exit; linhas[cont++]=$0; } END { for(i=0;i<cont;i++){ printf ("%s",linhas[i]); if (i<header || i>=cont-footer-1) printf ("%c","\n"); else { if (step==0) printf ("%c",(i<=cont-footer-1)?" ":""); else printf ("%c",(i-header)%step<step-1?" ":"\n"); } } }
Pesquisa de grupos do sistema por nome ou GID em AWK
Regressão linear usando Shell Bash + AWK
Mostrar as partições existentes no HD
Operações Matemáticas com utilizando arquivo texto.
Customizar a Instalação do Linux Debian com Preseed
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Sem espaço na partição home (4)
Aprendendo mais sobre Linux com livro (6)
Procrastinação e autossabotagem são problemas muito comuns na sociedad... (6)