- 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 sed
com 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
/ while
e 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 printf
e 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 awk
inclusão mawk
e nawk
.
Ambos os programas usam expressões regulares para selecionar e processar texto.
Eu tenderia a usar sed
onde 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 awk
quando o texto se parecer mais com linhas e colunas ou, como awk
se 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 awk
a 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 sed
para 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 awk
se 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 grep
se você quiser apenas pesquisar / extrair algo em um texto (arquivo)