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.391 ]
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
Pesquisa de grupos do sistema por nome ou GID em AWK
Mostrar as partições existentes no HD
Operações Matemáticas com utilizando arquivo texto.
Mostrar as partições existentes no HD
Programa IRPF - Guia de Instalação e Resolução de alguns Problemas
Criando uma Infraestrutura para uma micro Empresa
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalando o Pi-Hole versão v5.18.4 depois do lançamento da versão v6.0
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Instalei Windows 11 e não alterou o Grub do Debian (1)
Atualização do Google Chrome do Ubuntu (1)
Jogos baixados na Central de Aplicativos mas que não abrem (0)