Estou constantemente aprendendo novas ferramentas, mesmo as antiquadas, porque gosto de usar a solução certa para o problema.
Mesmo assim, me pergunto se ainda há razão para aprender alguns deles. awk
por exemplo, é interessante para mim, mas para o processamento de texto simples, eu posso usar grep
, cut
, sed
, etc. enquanto que para os complexos, eu vou para Python.
Bem, não quero dizer que não seja uma ferramenta poderosa e útil. Mas, uma vez que é preciso tempo e energia para aprender uma nova ferramenta, vale a pena ?
awk
text-processing
e-satis
fonte
fonte
Respostas:
Acho que depende do ambiente em que você se encontra. Se você é uma pessoa * nix, saber
awk
é uma coisa boa. O único outro ambiente de script que pode ser encontrado em praticamente todos os * nix ésh
. Enquantogrep
,sed,
etc podem certamente substituirawk
em umalinux
distro mainstream moderna , quando você muda para sistemas mais exóticos, saber um poucoawk
vai ser muito útil.awk
também pode ser usado para mais do que apenas processamento de texto. Por exemplo, um de meus supervisores escreve código de astronomia emawk
- ele é totalmente antiquado e incrível . Naquela época, era a melhor ferramenta para o trabalho ... e agora, embora seus alunos como eu usem python e outras coisas, ele se atém ao que sabe e funciona bem.Para encerrar, há muito código antigo circulando pelo mundo, saber um pouco
awk
não vai doer. Também o tornará melhor * pessoa nix :-)fonte
Se você aprender rapidamente o básico do awk, poderá realmente fazer coisas incríveis na linha de comando.
Mas a verdadeira razão para aprender awk é ter uma desculpa para ler o excelente livro The AWK Programming Language de seus autores Aho, Kernighan e Weinberger. Você pensaria, a partir do nome, que ele simplesmente ensina a despertar. Na verdade, isso é apenas o começo. Lançando-se na vasta gama de problemas que podem ser resolvidos quando se usa uma linguagem de script concisa que torna a manipulação de strings fácil - e awk foi um dos primeiros - ele ensina o leitor a implementar um banco de dados, um analisador, um intérprete , e (se a memória não me falha) um compilador para uma pequena linguagem de computador específica para um projeto! Se eles também tivessem programado um sistema operacional de exemplo usando awk, o livro teria sido uma introdução de pesquisa bastante completa para a ciência da computação!
Notavelmente claro e conciso, como o livro original da linguagem C, também é um exemplo maravilhoso de redação técnica amigável feita da maneira certa. Até o índice é uma obra de arte.
Awk? Se você souber disso, irá usá-lo na linha de comando ocasionalmente, mas para qualquer coisa maior você se sentirá preso, incapaz de acessar os recursos mais amplos de seu sistema e da Internet aos quais algo como o Python fornece acesso. Mas o livro? Você sempre ficará feliz em lê-lo!
fonte
A única razão pela qual uso
awk
é a divisão automática:Isso imprime o terceiro campo delimitado por espaços em branco em
file.in
. É um pouco mais fácil do que:fonte
awk '{print $3}' < file.in
vez deawk '{print $3}' file.in
? O awk já não lê arquivos quando passados como argumentos?awk
: /Eu acho que o awk é ótimo se o seu arquivo contém colunas / campos . Eu o uso ao processar / analisar uma coluna específica em um arquivo com várias colunas. Ou se eu quiser adicionar / excluir uma (s) coluna (s) específica (s).
por exemplo
será impresso apenas se o valor da 2ª coluna em um arquivo separado por tabulação for maior que o valor da 3ª coluna.
Claro que eu poderia usar Perl ou Python, mas awk torna muito mais simples com um comando de linha única conciso.
Além disso, aprender awk tem um custo muito baixo. Você pode aprender o básico do awk em menos de uma hora, então não é tanto esforço quanto aprender qualquer outra linguagem de programação / script.
fonte
Eu uso AWK ocasionalmente para lidar com HTML. Por exemplo, este código converte tabelas em arquivos csv:
O que é ótimo se você estiver raspando a tela. Na verdade, pode ser o caso de eu adorar AWK porque me permite construir a solução errada para problemas tão rapidamente :) mais exemplos . Também é mencionado nas adoráveis Pérolas de Programação de Jon Bentley .
fonte
Eu uso o awk de vez em quando. É bom para embaralhamento de texto muito simples no meio de um pipeline; ele preenche um nicho muito estreito entre não precisar dele e precisar sacar Perl / Python / qualquer.
Eu não aconselharia você a gastar muito tempo com isso, mas pode ser útil saber o básico da sintaxe - pelo menos o suficiente para que você possa consultar o manual rapidamente, caso queira usá-lo.
fonte
A maioria dos liners awk one pode ser alcançada com liners Perl one - se você escolher entrar em uma mentalidade Perl one liner. Ou use apenas três liners Perl :)
Se você está mantendo scripts de shell escritos por alguém que gostou do awk, então, claramente, você precisará aprender o awk.
Mesmo que não haja necessidade prática, se você já conhece regex, não demorará muito para aprender o básico, e é divertido ver como as coisas eram projetadas naquela época. É bastante elegante.
fonte
6 anos depois de fazer esta pergunta agora posso responder com certeza: não, aprender awk não vale a pena.
As tarefas básicas são fáceis de manusear, mas os comandos bash básicos ou mesmo as ferramentas GUI. Tarefas mais complexas serão facilmente resolvidas com linguagens dinâmicas modernas como Python (fav ou mine) ou Ruby.
Definitivamente, você deve aprender uma linguagem dinâmica de script moderna, pois ela o ajudará em muitas tarefas (web, administração, processamento de dados, automação, etc). E, ao fazer isso, aprender ferramentas como o awk é completamente inútil, e você economizará, na melhor das hipóteses, alguns segundos por mês.
fonte
Se você já conhece e usa sed, é melhor aprender pelo menos um pouco de awk. Eles podem ser usados juntos para alguns truques muito poderosos. Sempre impressiona o público.
fonte
Computerworld recentemente deu uma entrevista com Alfred V. Aho (um dos três criadores do AWK) sobre AWK. É uma leitura bastante interessante. Então, talvez você encontre algumas dicas nele, porque é uma boa ideia aprender AWK.
fonte
Aprender AWK foi inestimável para mim em meu último contrato de trabalho em um sistema Linux embarcado no qual nem Perl nem a maioria das outras linguagens de script foram instaladas.
fonte
awk tem uma relação utilidade / dificuldade muito boa, e "awk simples" funciona em qualquer Unix / Linux / MacOS (e pode ser instalado em outros sistemas também).
Ele foi projetado na Idade de Ouro, quando as pessoas odiavam digitar, então os scripts podem ser muito, muito curtos e rápidos de escrever. Vou tentar instalar o mawk, uma versão rápida, supostamente ele acelera o cálculo cerca de 9 vezes, o awk / gawk é bem lento, então se você quiser usá-lo ao invés do R etc., você pode querer o mawk.
fonte
É útil principalmente se você tiver que ocasionalmente analisar arquivos de log para dados ou saída de programas durante a execução de scripts de shell, porque é muito fácil conseguir no awk que isso exigiria um pouco mais de linhas de código em python.
Certamente tem mais poder do que isso, mas parece que são as tarefas para as quais a maioria das pessoas o usa.
fonte
Claro: estou trabalhando em um ambiente onde as únicas linguagens disponíveis são: (alguma linguagem shity que gera COBOL, OMG, OMG), bash (versão antiga), perl (ainda não domino), sed, awk e alguns outros utilitários de linha de comando. Saber
awk
me economizou várias horas (e gerou várias tarefas de processamento de texto de meus colegas - eles vêm até mim pelo menos três vezes por dia).fonte
Eu diria que provavelmente não vale mais a pena. Eu o uso de vez em quando como um editor de stream muito mais versátil do que o sed, com habilidades de pesquisa incluídas, mas se você é proficiente em python, não conheço uma tarefa que você consiga terminar muito mais rápido para compensar o tempo necessário para aprender awk.
O comando a seguir é provavelmente o único para o qual usei o awk nos últimos dois anos (ele limpa pacotes parcialmente removidos de meus sistemas Debian / Ubuntu):
fonte
Não.
Mesmo que seja interessante, você pode fazer tudo o que o awk pode fazer usando outras ferramentas mais poderosas como o Perl.
Gaste seu tempo aprendendo essas ferramentas mais poderosas - e apenas acidentalmente aprenda algumas coisas ao longo do caminho.
fonte
Eu diria que existe. Para coisas simples, AWK é muito mais fácil para o administrador de sistema / desenvolvedor inexperiente do que Python. Você pode aprender um pouco de AWK e fazer muitas coisas, aprender Python significa aprender uma linguagem totalmente nova (sim, eu sei que AWK é uma linguagem que faz sentido também).
Perl pode ser capaz de fazer muitas coisas que AWK pode fazer, mas ofereceu a opção nos dias de hoje eu escolheria Python aqui. Então, sim, você deve aprender AWK. mas aprenda Python também :-)
fonte
awk
é uma linguagem powertool, então você provavelmenteawk
será usada em algum lugar se for um profissional de TI de qualquer tipo. Se você consegue lidar com a sintaxe e as expressões regulares degrep
e,sed
então, não deve ter problemas para aprenderawk
e provavelmente vale a pena.Eu
awk
realmente descobri que brilhar é na simplificação de coisas como processar registros de várias linhas e mutilar / interpolar vários arquivos simultaneamente.fonte
Agora que o PERL foi portado para praticamente todas as plataformas significativas, eu diria que não vale a pena. É mais versátil do que sed e awk juntos. Quanto à divisão automática, você pode fazer isso em perl assim:
EDIT: você ainda pode querer se familiarizar um pouco com o awk, porque algumas outras ferramentas são baseadas em sua filosofia de ações baseadas em padrões (por exemplo, DTrace no Solaris).
fonte
Eu trabalho na área em que os arquivos estão em formato de coluna. Assim, o awk é inestimável para mim REFORMATAR o arquivo para que diferentes softwares possam trabalhar juntos. Para profissionais que não são de TI, usar o awk é suficiente e perfeito. Hoje em dia, a velocidade do computador não é um problema, então posso combinar awk e unix para canalizar muitos comandos de liners em um "script". Com a pesquisa Awk por campo e registro, eu o uso para verificar os dados do arquivo muito rápido, em vez do "vi" para abrir um arquivo. Devo dizer que a capacidade do awk trouxe alegria ao meu trabalho, especialmente, eu sou capaz de ajudar o colega de trabalho a resolver as coisas rapidamente usando o awk. Código incrível para mim.
fonte
Recentemente, tentei visualizar arquivos pcap de rede registrando um ataque DOS que atingiu mais de 20 Gbs. Eu precisava do carimbo de data / hora e dos endereços IP. No meu cenário, o AWK one-liner funcionou fabulosamente e muito rápido também. Eu usei o AWK especificamente para limpar os arquivos extraídos, obter os endereços IP e a contagem total de pacotes desses endereços IP em um intervalo de tempo agrupado. Eu concordo totalmente com o que outras pessoas escreveram acima. Isso depende de suas necessidades.
fonte
Uma razão para NÃO aprender o awk é que ele não tem correspondências não gananciosas em expressões regulares.
Eu tenho um código awk que agora devo reescrever apenas porque de repente depurei que não existem correspondências não gananciosas em awk / gawk, portanto, ele não pode executar corretamente alguns regexes.
fonte
Depende de seus companheiros de equipe e de seu líder e da tarefa em que está trabalhando.
fonte
Tenho feito alguns códigos em python no momento. Mas eu ainda não o conheço bem o suficiente para usar facilmente para transformações simples de um arquivo.
Com o awk, posso desenvolver rapidamente um pedaço de código de uma linha na linha de comando do Unix que faz algumas transformações bastante swish. Cada vez que eu uso o awk, o trecho de código que escrevo será descartável e não terá mais do que algumas linhas. Talvez uma instrução "if" e uma instrução "printf" aqui ou ali em uma linha.
Eu nunca escrevi um trecho de código com mais de 10 linhas com awk. Eu vi alguns desses scripts anos atrás.
Mas qualquer coisa que exigisse muitas linhas de código, eu recorreria ao python.
Eu amo o awk. É uma ferramenta muito poderosa em combinação com o sed.
fonte