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.290 ]
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
Mostrar as partições existentes no HD
Regressão linear usando Shell Bash + AWK
Informa usuários de UID duplicado
Mostrar as partições existentes no HD
Vou voltar moderar conteúdos de Dicas e Artigos (0)
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
Instalação Uefi com o instalador clássico do Mageia (1)
Vou voltar moderar conteúdos de Dicas e Artigos (0)
É cada coisa que me aparece! - não é só 3% (2)
[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