Principal diferença entre tr (translate) para sed e awk

1

AFAIC sed e awk são utilitários de processamento de texto para fins gerais com os quais um usuário pode obter resultados bastante semelhantes, em uma sintaxe ligeiramente diferente:

Com ambos, um usuário pode adicionar, substituir / traduzir e excluir conteúdo em um arquivo.

Qual é a principal diferença entre esses dois utilitários de processamento de texto de uso geral e o utilitário de processamento de texto tr ?

Suponho que a funcionalidade tr esteja incluída em sed e awk , de modo que é restrita ao contexto específico de substituir uma sequência em outra, mas estou Não tenho certeza se estou certo aqui ou traduzindo para outro.

    
por user9303970 03.03.2018 / 22:18

2 respostas

2

Sim, tr é uma ferramenta "simples" comparada a awk e sed , e os dois awk e sed podem imitar mais o seu comportamento básico, mas Nenhuma das sed ou awk tem " tr embutido", no sentido de que existe uma única coisa nelas que exatamente faz todas as coisas que tr faz.

tr funciona em caracteres, não em sequências, e converte caracteres de um conjunto em caracteres em outro (como em tr 'A-Z' 'a-z' para entrada em minúsculas). Seu nome é curto de "traduzir" ou "transliterado".

Ele possui alguns recursos interessantes, como a possibilidade de excluir vários caracteres consecutivos que são os mesmos, o que pode ser um pouco difícil de implementar com uma única expressão sed .

Por exemplo,

tr -s '\n'

comprimirá todas as novas linhas consecutivas da entrada em novas linhas únicas.

Para caracterizar as três ferramentas grosseiramente:

  • tr funciona em caracteres (altera ou apaga-os).
  • sed trabalha em linhas (modifica palavras ou outras partes de linhas, ou insere ou exclui linhas).
  • awk trabalham em registros com campos (por padrão, campos separados por espaço em branco em uma linha, mas isso pode ser alterado, definindo FS e RS ).
por 03.03.2018 / 22:30
3

sed tem um comando y que é análogo a tr :

y/string1/string2/

Replace all occurrences of characters in string1 with the corresponding characters in string2.

$ echo 'a big cat' | sed -e 'y/abc/def/'
d eig fdt

y não suporta intervalos de caracteres a-z ou classes [:alpha:] como tr faz , nem os modos de complemento -c e -C . A exclusão ( -d ) é possível com s// , pois está substituindo as execuções por caracteres únicos ( -s ). Como em todo o sed , ele é fundamentalmente orientado à linha. y às vezes é útil no meio de um script sed maior, mas tr provavelmente faz um trabalho melhor se isso for tudo o que você está fazendo.

awk não tem equivalente à funcionalidade básica de tr , embora você possa substituir os caracteres um de cada vez. A linguagem awk é bastante genérica e você pode escrever loops e condicionais suficientes para implementar qualquer transformação que você queira se você estiver motivado o suficiente. Se você estivesse ainda mais motivado, provavelmente poderia gerenciar isso em sed também. As ferramentas não são realmente equivalentes em qualquer sentido.

    
por 03.03.2018 / 22:31