Он работает отлично и ожидаемо.
Ваша команда может быть переписана просто как:
awk '{print $2, $1, $3, $4, $5}; /A$/ {print $1, $2}; /!A$/ {print $1, $2}' students
она состоит из 3 awk выражений:
{print $2, $1, $3, $4, $5} /A$/ {print $1, $2} /!A$/ {print $1, $2}Все три выражения будут применены ко всем записям.
Первый перестраивает поля соответственно. Второй соответствует, если запись заканчивается на A (/A$/), если это так, печатается первое и второе поля. Третье соответствует, если запись заканчивается на !A, если так печатаются первая и вторая. Как первые две записи не удовлетворяют условию выражения 2, поля печатаются в соответствии с выражением 1. То же самое относится к номеру записи 4 и 5 Только запись 3 и 6 соответствует условию 2-го выражения, т.е. заканчивается на A, поэтому действие этого условия, т.е. на напечатайте первые два поля, выполняемые сразу после выполнения выражения 1, т.е. для печати перестроенных полей. Таким образом, для записи 3 и 6 применяются два действия. Я думаю, что это то, что сработало. Ни одно из записей не соответствует условию выражения 3, то есть заканчивается на !A, возможно, вы хотели использовать это условие как !/A$/, то есть записи, которые не заканчиваются на A (и применяют желаемое действие).