У меня есть назначение, выполняющее ряд (n) awk-команд в одном файле сценария. Ключ этого файла скрипта состоит в том, чтобы отфильтровать определенные строки и записи этого исходного текстового файла здесь, называемые students:
Frank Smith Engineering Senior C
John Doe Marketing Junior B
Nancy Jones Engineering Junior A
Betty Anderson Nursing Sophomore B
Bob Johnson History Freshman B
James Smith Economics Senior A
У меня есть эти awk-команды в моем файле сценария students [!d1 ].
{print $2, $1, $3, $4, $5}
/A$/ {print $1, $2}
/!A$/ {print $1, $2}
На данный момент, когда я запускаю nawk -f testscript.script students
Для первых нескольких строк вывода я получаю:
Smith Frank Engineering Senior C
Doe John Marketing Junior B
Jones Nancy Engineering Junior A
Nancy Jones
Anderson Betty Nursing Sophomore B
Johnson Bob History Freshman B
Smith James Economics Senior A
James Smith
Где, как вы видите, вторая команда вливается в первую, а не разделяется по желанию.
Что приводит к моему вопросу: как я могу отделить команды в сценарии оболочки, так что каждая новая команда имеет отдельный независимый вывод от других?
Он работает отлично и ожидаемо.
Ваша команда может быть переписана просто как:
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 (и применяют желаемое действие).