Pergunta

  • O que é a diferença entre awk e sed?
  • Que tipo de aplicação são o melhor uso casos para ferramentas sed e awk?
Foi útil?

Solução

sed é um editor de fluxo. Ele funciona com correntes de caracteres em uma base per-line. Tem uma linguagem de programação primitiva que inclui laços de estilo Goto e condicionais simples (além de correspondência de padrão e correspondência endereço). Existem basicamente apenas duas "variáveis": espaço de padrão e espaço espera. Legibilidade de scripts podem ser difícil. operações matemáticas são extraordinariamente difícil no melhor.

Existem várias versões do sed com diferentes níveis de suporte para as opções de linha de comando e recursos de linguagem.

awk é orientada para campos delimitados em uma base per-line. Tem muito mais robusto construções de programação incluindo if / else, while, do / while e for (C-estilo e iteração da matriz). Existe um apoio completo para as variáveis ??e unidimensional matrizes de associação mais (IMO) matrizes kludgey multidimensionais. operações matemáticas se assemelham aos de C. Tem printf e funções. O "K" em "AWK" significa " K ernighan", como na fama "Kernighan e Ritchie" do livro "C Programming Language" (não esquecer A ho e W Einberger). Um pode conseguir escrever um detector de plágio acadêmico usando awk.

GNU awk (gawk) tem inúmeras extensões, incluindo verdadeiros arrays multidimensionais na versão mais recente. Há outras variações de awk incluindo mawk e nawk.

Ambos os programas usar expressões regulares para a seleção e processamento de texto.

Eu tenderia a utilização sed onde existem padrões no texto. Por exemplo, você poderia substituir todos os números negativos em algum texto que estão na forma "menos-sinal seguido por uma seqüência de dígitos" (por exemplo, "-231,45") com a forma "suportes do contador" (por exemplo, "(231,45)" ) utilizando este (que tem espaço para melhorias):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

Gostaria de usar awk quando o texto se parece mais com linhas e colunas ou, como awk se refere a eles "registros" e "campos". Se eu ia fazer uma operação semelhante como acima, mas apenas no terceiro campo em um arquivo delimitado simples vírgula eu poderia fazer algo como:

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

É claro que esses são apenas exemplos muito simples que não ilustram a gama de capacidades que cada um tem para oferecer.

Outras dicas

1) Qual é a diferença entre awk e sed?

Ambos são ferramentas que transformam texto. MAS awk pode fazer mais coisas além de apenas manipular texto. É uma linguagem de programação por si só com a maioria das coisas que você aprende na programação, como matrizes, loops, if / controle de fluxo de outra etc Você pode "programa" em sed, bem como, mas você não vai querer manter o código escrito nele .

2) Que tipo de aplicação são melhores casos de uso para sed e ferramentas awk?

Conclusão: Use sed de analisar o texto muito simples. Qualquer coisa além disso, awk é melhor. Na verdade, você pode cavar sed completamente e apenas usar awk. Desde suas funções se sobrepõem e awk pode fazer mais, basta usar awk. Você vai reduzir sua curva de aprendizagem também.

Ambas as ferramentas são destinadas ao trabalho com texto e há tarefas ambas as ferramentas podem ser usadas para.

Para mim a regra para separá-los é: Use sed para automatizar tarefas que você faria de outra forma em um editor de texto manualmente. É por isso que é chamado de fluxo editor . (Você pode usar os mesmos comandos para editar texto no vim). Use awk se você quer analisar texto, ou seja, campos de contagem, totais calcular, extrato e estruturas reorganizam etc.

Além disso, você não deve esquecer grep. Use grep se só deseja procurar / extrair algo em um texto (arquivo)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top