- Qual é a diferença entre awk e sed?
- Que tipo de aplicativo são os melhores casos de uso para ferramentas sed e awk?
Respostas:
sedé um editor de stream. Funciona com fluxos de caracteres por linha. Possui uma linguagem de programação primitiva que inclui loops no estilo goto e condicionais simples (além da correspondência de padrões e correspondência de endereços). Existem essencialmente apenas duas "variáveis": espaço de padrão e espaço de espera. A legibilidade dos scripts pode ser difícil. Operações matemáticas são extraordinariamente estranhas, na melhor das hipóteses.
Existem várias versões sedcom diferentes níveis de suporte para opções de linha de comando e recursos de idioma.
awké orientado para campos delimitados por linha. Tem muito mais robusto, incluindo construções de programação if/ else, while, do/ whilee for(C-estilo e iteração da matriz). Existe suporte completo para variáveis e matrizes associativas de dimensão única mais matrizes multidimensionais kludgey (IMO). As operações matemáticas se assemelham às de C. Tem printfe funciona. O "K" em "AWK" significa " K ernighan", como em "Kernighan e Ritchie" do livro "C Programming Language" (famoso para linguagem de programação C) (para não esquecer A ho e W einberger). Pode-se conceber escrever um detector de plágio acadêmico usando awk.
O GNU awk( gawk) possui inúmeras extensões, incluindo matrizes multidimensionais verdadeiras na versão mais recente. Existem outras variações de awkinclusão mawke nawk.
Ambos os programas usam expressões regulares para selecionar e processar texto.
Eu tenderia a usar sedonde há padrões no texto. Por exemplo, você pode substituir todos os números negativos em algum texto que esteja no formato "sinal de menos seguido por uma sequência de dígitos" (por exemplo, "-231,45") pelo formulário "colchetes do contador" (por exemplo "(231,45)" ) usando este (que tem espaço para melhorias):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
Eu usaria awkquando o texto se parecer mais com linhas e colunas ou, como awkse refere a eles "registros" e "campos". Se eu fosse fazer uma operação semelhante à anterior, mas apenas no terceiro campo em um arquivo delimitado por 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 toda a gama de recursos que cada um tem a oferecer.
sed: sed.sourceforge.net/#scripts
1) Qual é a diferença entre awk e sed?
Ambas são ferramentas que transformam texto. MAS o awk pode fazer mais coisas além de apenas manipular o texto. É uma linguagem de programação por si só com a maioria das coisas que você aprende em programação, como matrizes, loops, controle de fluxo if / else etc. Você pode "programar" no sed também, mas não deseja manter o código escrito nela .
2) Que tipo de aplicativo são os melhores casos de uso para ferramentas sed e awk?
Conclusão: use sed para análise de texto muito simples. Qualquer coisa além disso, o awk é melhor. De fato, você pode abandonar o sed completamente e apenas usar o awk. Como suas funções se sobrepõem e o awk pode fazer mais, basta usar o awk. Você também reduzirá sua curva de aprendizado.
sed, 's/search/replace'é muito mais fácil digitar do que awka sintaxe e é o que você precisa na maioria das vezes.
Ambas as ferramentas destinam-se a trabalhar com texto e existem tarefas para as quais elas podem ser usadas.
Para mim, a regra para separá-los é: Use sedpara automatizar tarefas que você faria de outra maneira em um editor de texto manualmente. É por isso que é chamado editor de stream . (Você pode usar os mesmos comandos para editar texto no vim). Use awkse você quiser analisar texto, ou seja, contar campos, calcular totais, extrair e reorganizar estruturas etc.
Além disso, você não deve esquecer grep. Use grepse você quiser apenas pesquisar / extrair algo em um texto (arquivo)