A diferença mais importante entre suas duas linhas seria dependendo da entrada. cut
usa um único caractere em -d
como delimitador de campo (o padrão é TAB) e cada ocorrência desse caractere inicia um novo campo. awk
, no entanto, é mais flexível. O separador está na variável FS
e pode ser uma cadeia vazia (cada caractere de entrada faz um campo separado), um caractere único ou uma expressão regular. O caso especial de um único caractere de espaço (o padrão) significa dividir em qualquer seqüência de espaço em branco. Além disso, awk
suprime o espaço em branco inicial por padrão.
Por favor, compare:
$ echo "abc def" | cut -f 2 -d ' '
def
$ echo "abc def" | cut -f 2 -d ' '
$ echo " abc def" | cut -f 2 -d ' '
abc
$ echo "abc def" | awk '{ print $2 }'
def
$ echo "abc def" | awk '{ print $2 }'
def
$ echo " abc def" | awk '{ print $2 }'
def
Aqui, awk
divide a sequência de espaços entre abc
e def
, enquanto cut
considera cada espaço como um separador.
O que você toma depende do que você deseja alcançar. Caso contrário, eu esperaria que o cut
fosse mais rápido, pois é uma ferramenta menor e única, enquanto awk
tem sua própria linguagem de programação.