Está funcionando perfeitamente e com expectativa.
Seu comando pode ser reescrito simplesmente como:
awk '{print $2, $1, $3, $4, $5}; /A$/ {print $1, $2}; /!A$/ {print $1, $2}' students
é composto por 3% expressõesawk
:
-
{print $2, $1, $3, $4, $5}
-
/A$/ {print $1, $2}
-
/!A$/ {print $1, $2}
Todas as três expressões serão aplicadas a todos os registros.
-
O primeiro deles está reorganizando os campos de acordo
-
O segundo é a correspondência se um registro terminar em A
( /A$/
), em caso afirmativo, o primeiro e o segundo campos serão impressos
-
O terceiro é a correspondência se um registro terminar em !A
, em caso afirmativo, o primeiro e o segundo serão impressos
-
Como os dois primeiros registros não satisfazem a condição da expressão 2, os campos são impressos de acordo com a expressão 1. O mesmo vale para o número de registro 4 e 5
-
Registre apenas 3 e 6 condição de correspondência da segunda expressão, ou seja, termina em A
, portanto, a ação dessa condição, ou seja, imprimir os dois primeiros campos após a execução da expressão 1, ou seja, imprimir os campos reorganizados. Então, duas ações estão sendo aplicadas para o registro 3 e 6. Eu acho que isso é o que te enganou.
-
Nenhum dos registros corresponde à condição da expressão 3, ou seja, termina em !A
, talvez você queira usar a condição como !/A$/
, ou seja, registros que não terminam em A
(e aplicam a ação desejada) .