Pergunta

Eu estou constantemente aprendendo novas ferramentas, até mesmo antigos de moda, porque eu gosto de usar a solução certa para o problema.

No entanto, gostaria de saber se ainda há qualquer 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.

Agora, eu não quero dizer isso é que não é uma ferramenta poderosa e acessível. Mas uma vez que leva tempo e energia para aprender uma nova ferramenta, vale a pena ?

Foi útil?

Solução

Eu acho que depende do ambiente em que se encontra. Se você é uma pessoa * nix, então sabendo awk é uma coisa boa. O único outro ambiente de script que pode ser encontrado em praticamente todos os * nix é sh. Assim, enquanto grep, sed, etc certamente pode substituir awk em um moderno distro dominante linux, quando você mover a sistemas mais exóticos, conhecer um pouco awk vai ser acessível real.

awk também pode ser usado por mais de processamento de texto apenas. Por exemplo um dos meus supervisores escreve código de astronomia em awk - que é como totalmente velha escola e incrível ele é. De volta a seus dias, era a melhor ferramenta para o trabalho ... e agora, apesar de seus estudantes como eu usar python eo que não, ele adere ao que ele sabe e funciona bem.

No fechamento, há um monte de código antigo chutar ao redor do mundo, conhecendo um pouco awk não vai doer. Ele também irá torná-lo melhor * nix pessoa: -)

Outras dicas

Se você aprender rapidamente o básico de awk, você pode realmente fazer coisas incríveis na linha de comando.

Mas o real razão para aprender awk é ter uma desculpa para ler o soberba livro O AWK Linguagem de programação por seus autores Aho, Kernighan e Weinberger. Você poderia pensar, a partir do nome, que ele simplesmente lhe ensina awk. Na verdade, isso é apenas o começo. Lançando para o vasto leque de problemas que podem ser resolvidos uma vez que se está usando uma linguagem de script concisa que faz a manipulação de cadeia fácil - e awk foi um dos primeiros - ele passa a ensinar ao leitor como 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ífico do projeto! Se apenas eles também tinha programado um exemplo de sistema operacional usando awk, o livro teria sido uma introdução levantamento bastante completo à ciência da computação!

Notoriamente clara e concisa, como o original livro Linguagem C, também é um exemplo maravilhoso de amigável escrita técnica bem feito. Mesmo o índice é uma peça de artesanato.

Awk? Se você perceba, você vai usá-lo na linha de comando, ocasionalmente, mas para qualquer coisa maior que você vai se sentir preso, incapaz de acessar os recursos mais amplos de seu sistema e da Internet que algo como Python fornece acesso. Mas o livro? Você sempre será feliz que você lê-lo!

A única razão pela qual eu uso awk é a auto-splitting:

awk '{print $3}' < file.in

Este imprime o terceiro campo delimitado por espaços em branco em file.in. É um pouco mais fácil do que:

tr -s ' ' < file.in | cut -d' ' -f3

Eu acho que awk é ótimo se o arquivo contém colunas / campos . Eu usá-lo durante o processamento / análise de uma determinada coluna em um arquivo com várias colunas. Ou se eu quiser adicionar / excluir uma coluna específica (s).

por exemplo.

awk -F \t '{ if ($2 > $3) print; }' <filename>

irá imprimir somente se o valor da coluna segunda em um arquivo separado guia é maior do que o valor da coluna 3.

É claro que eu poderia usar Perl ou Python, mas awk faz com que seja muito mais simples com um comando conciso única linha.

Também aprender awk é bastante baixo custo. Você pode aprender awk básico em menos de uma hora, por isso não é tanto esforço como aprender qualquer outra linguagem de programação / scripting.

Eu uso AWK ocasionalmente para lidar com HTML. Por exemplo, este código traduz tabelas para arquivos CSV:

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

O que é ótimo se você estiver captura de tela. Na verdade, ele pode ser o caso que eu amo AWK, pois permite-me para criar a solução errada para problemas tão rapidamente :) mais exemplos . Ele também é mencionado no de Jon Bentley linda Pérolas de programação .

Eu faço uso awk cada tantas vezes. É bom para texto muito simples arrastando no meio de um gasoduto; ele preenche um certo nicho muito estreito entre não necessitando-lo em tudo e que precisam sacar Perl / Python / whatever.

Eu não aconselharia você gastar um monte de tempo com isso, mas pode vir a calhar para saber o básico de sintaxe - pelo menos o suficiente para que você pode consultar o manual de rapidamente você nunca deve querer usá-lo .

A maioria dos awk forros pode ser conseguido com Perl forros um - se você optar por entrar em um Perl uma mentalidade forro. Ou então, basta usar Perl três forros:)

Se você está mantendo shell scripts escritos por alguém que gostava de awk, então é claro, você está indo para necessidade de aprender awk.

Mesmo que não há nenhuma necessidade prática, se você já sabe regex não vai demorar muito para pegar o básico, e é divertido ver como as coisas foram projetados na época. É bastante elegante.

Se você já conhece e usa sed, assim como você pode pegar pelo menos um pouco de awk. Eles podem ser canalizados juntos por alguns truques muito poderosos. Sempre impressiona o público.

6 anos após essa pergunta agora eu posso responder com certeza:. Não, aprendendo awk não vale a pena

tarefas básicas são punho, mas comandos básicos Bash, ou até mesmo ferramentas GUI facilmente. tarefas mais complexas será facilmente resolvido com um moderno linguagens dinâmicas como Python (fav ou minas) ou Ruby.

Você deve definitivamente aprender uma linguagem de script dinâmica mordern uma vez que irá ajudá-lo em tantas tarefas (web, admin, dados esmagando, automação, etc). E ao fazê-lo aprendendo ferramentas como awk é completamente inútil, você vai economizar na melhor das hipóteses alguns segundos a cada mês.

Computerworld fez recentemente um href="http://www.techworld.com.au/article/216844/-z_programming_languages_awk" rel="nofollow noreferrer">

Aprendizagem AWK foi inestimável para mim no meu último contrato de trabalho em um sistema Linux embutido no qual nem Perl nem a maioria das outras linguagens de script foram instalados.

É útil principalmente se você tem que arquivos de log, ocasionalmente, de análise de dados ou de saída dos programas, shell script, porque é muito fácil de alcançar em awk que que iria levá-lo um pouco mais linhas de código em python.

Ele certamente tem mais poder do que isso, mas este parece ser tarefas a maioria das pessoas usá-lo.

É claro: Estou trabalhando em um ambiente onde as línguas disponíveis apenas são: (alguma linguagem shity que gera COBOL, OMG, OMG), bash (versão antiga), perl (eu não dominá-lo ainda), sed, awk, e alguns outros utilitários de linha de comando. Sabendo awk me salvou várias horas (e tinha gerado várias tarefas de processamento de texto do meu collegaues - eles vêm a mim, pelo menos, três vezes por dia).

awk tem uma utilidade muito boa relação preço / dificuldade, e "awk simples" funciona em todos os Unix / Linux / MacOS (e ele pode ser instalado em outros sistemas também).

Foi projetado em Golden Age quando as pessoas odiavam digitação, por isso, os scripts podem ser muito, muito curto e rápido para escrever. Vou tentar mawk Instal, uma versão rápida, supostamente acelera a computação cerca de 9 vezes, awk / gawk é bastante lento, por isso, se você quiser usá-lo em vez de R etc. você pode querer mawk.

Eu diria que provavelmente não é a pena mais. Eu usá-lo de vez em quando como um editor de fluxo muito mais versátil do que o sed com a procura habilidades incluídos, mas se você está acostumado com python Eu não sei uma tarefa que você seria capaz de terminar muito mais rápido para compensar o tempo necessário para aprender awk.

O comando a seguir é provavelmente o único para o qual eu tenho awk utilizado nos últimos dois anos (ele limpa pacotes de meia-removido do meu sistema Debian / Ubuntu):

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P

Não.

Mesmo que possa ser interessante, você pode fazer tudo o que awk pode fazer usando outras ferramentas, mais poderosos, como Perl.

Passe o seu tempo aprendendo essas ferramentas mais poderosas -. E apenas incidentalmente pegar alguns awk ao longo do caminho

Eu diria que existe. Para coisas simples, AWK é muito mais fácil para os inexperientes sysadmin / desenvolvedor de Python. Você pode aprender um pouco AWK e fazer um monte de coisas, aprendendo Python significa aprender uma nova linguagem (sim, eu sei AWK é uma língua é uma sensação muito).

Perl pode ser capaz de fazer um monte de coisas AWK pode fazer, mas ofereceu a escolha neste dia e idade eu escolheria Python aqui. Então, sim, você deve aprender AWK. mas aprender Python também: -)

Agora que Perl é portado para praticamente todas as plataformas significativa, eu diria que não vale a pena. É mais versátil do que o sed e awk juntos. Quanto à auto-splitting, você pode fazê-lo em perl assim:

perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

EDIT: você ainda pode querer obter um pouco familiarizar com awk, porque algumas outras ferramentas são baseadas em sua filosofia de ações baseadas em padrões (por exemplo DTrace em Solaris)

.

Eu trabalho na área dos arquivos estão em formato de coluna. Então awk é inestimável para mim para reformatar o arquivo para software diferente podem trabalhar juntos. Para profissão não de TI, usando awk é suficiente e perfeito. Agora, um dia, a velocidade do computador não é um problema, para que eu possa combinar awk & unix a tubulação comandar muitas 1 forros em um "script". Com a busca Awk pelo campo e registro, eu usá-lo para verificar os dados de arquivos muito rápido, em vez de "vi" para abrir um arquivo. Eu tenho que dizer a capacidade awk trouxe alegria para o meu trabalho, especialmente, eu sou capaz de ajudar colega de trabalho para as coisas resolver rapidamente usando awk. Código incrível para mim.

Recentemente eu estava tentando visualizar arquivos pcap rede registrando um ataque DOS, que ascenderam a mais de 20Gbs. Eu precisava do timestamp e os endereços IP. Em meu cenário, AWK one-liner trabalhou fabulosamente e bastante rápido também. I usado especificamente AWK para limpar os arquivos extraídos, obter os endereços IP e a contagem total de pacotes desses endereços IP dentro de extensão agrupados de tempo. Eu concordo totalmente com o que as outras pessoas têm escrito acima. Tudo depende das suas necessidades.

awk é uma linguagem powertool, então você provavelmente vai encontrar awk estar em algum lugar usado se você for um profissional de TI de qualquer espécie. Se você pode lidar com a sintaxe e expressões regulares de grep e sed então você deve ter nenhum problema pegando awk e é provavelmente vale a pena.

Onde eu encontrei awk realmente brilhar está em simplificar as coisas, como o processamento de registros de multi-linha e deturpação / interpolação vários arquivos simultaneamente.

Uma razão para não aprender awk é que ele não tem partidas não-gananciosos em expressões regulares.

Eu tenho um código awk que agora eu só deve reescrever porque de repente eu depurado que não há tal coisa como jogos não-gananciosos em awk / gawk, portanto, não pode executar corretamente algumas expressões regulares.

Depende de seus companheiros de equipe e você líder e a tarefa que você está trabalhando.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even java
    }
  }else{
    do as they ask
  }
}

Eu tenho feito alguns codificação em python no presente. Mas eu ainda não sei bem o suficiente para usar facilmente para simples off transformações de arquivo.

Com awk I pode desenvolver rapidamente um pedaço uma linha de código na linha de comando unix que faz algumas transformações bastante sinuosos. Toda vez que eu uso awk, o pedaço de código de escrita vou ser descartável e não mais do que algumas linhas longas. Talvez um "se" statment e declaração "printf" aqui ou ali por um line.

Eu nunca escrevi um pedaço de código que é mais de 10 linhas de comprimento com awk. Eu vi alguns desses scripts anos atrás.

Mas qualquer coisa que exigia muitas linhas de código, eu iria recorrer a python.

Eu amo awk. É uma ferramenta muito poderosa em combinação com sed.

scroll top