O backbone do AWK é fazer algo para uma linha que corresponda a algo. Você tem dois tipos de linhas, portanto, correspondem a cada uma e são impressas de maneira diferente para cada uma. Uma maneira de fazer isso é:
awk '/^uid/ { print } /^mail/ { print $3" "$4" "$1" "$2 }' <your files>
Como funciona:
- Para as linhas que começam com
uid
, ele as imprime à medida que aparecem; - para linhas que começam com
mail
, organiza as colunas de maneira diferente (observe o espaço extra entre$1
e$2
, pois está lá nasuid
linhas).
(Este é útil se você tiver outras linhas no arquivo.)
Outra maneira:
awk '/^mail/{$0=$3" "$4" "$1" "$2};1' <your files>
Como funciona:
-
print
imprime$0
(a linha completa) por padrão; -
;1
é equivalente a; { print }
; - alteramos
$0
para linhas que correspondem a^mail
.
(Este provavelmente é mais rápido se você quiser processar e imprimir todas as linhas no arquivo . Obrigado don_crissti.)