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.347 ]
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
Operações Matemáticas com utilizando arquivo texto.
Mostrar as partições existentes no HD
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Instalar o Microsoft Edge no Slackware 15
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Separar trafego da VPN da VPS (0)
Formatando cartão de memoria que nao formata[AJUDA] (17)
warsaw parou de funcionar após atualização do sistema (solução) (0)
Desde que seja DDR3, posso colocar qualquer memória? [RESOLVIDO] (6)