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.292 ]
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"); } } }
Regressão linear usando Shell Bash + AWK
Mostrar as partições existentes no HD
Pesquisa de grupos do sistema por nome ou GID em AWK
Pesquisa de grupos do sistema por nome ou GID em AWK
Regressão linear usando Shell Bash + AWK
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Pegar a ultima ocorrencia viva (1)
Pq me aparece isso quando fui atualizar o Ubuntu 24.10 no terminal? (1)
como coloco para instalar com esse erro. (13)
Alguém sabe de documentos de texto e /ou vídeo aulas de certificações ... (1)