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.584 ]
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");
}
}
}
Mostrar as partições existentes no HD
Pesquisa de grupos do sistema por nome ou GID em AWK
Regressão linear usando Shell Bash + AWK
Utilização de memória swap no Solaris ( swap memory utilization in Solaris )
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









