Довольно поздно для этого, но для потомков я хотел бы отметить, что вы можете сделать это:
awk '
BEGIN
{
while(getline < FILENAME)
{
# do first pass stuff
}
close(FILENAME)
}
{
# do second pass stuff
}
' file
Если вы хотите сделать больше проходов, вы можете close(FILENAME)
после первого цикла while, а затем выполнить второй.
Да, достаточно использовать один wait
без аргументов в конце, чтобы дождаться завершения всех фоновых заданий.
Обратите внимание, что фоновые задания, запущенные в подоболочке, необходимо будет ожидать в той же подоболочке, в которой они были запущены. В коде, который вы показываете, такого экземпляра нет.
Также обратите внимание, что вопрос , на который вы ссылаетесь на , касается проверки состояния завершения фоновых заданий. Это потребует выполнения wait
один раз для каждого фонового задания (с PID этого задания в качестве аргумента ).
По моему мнению, хотя одного ожидания без параметров должно быть достаточно, это не является хорошей практикой (ретрансляции поведения по умолчанию ). Я бы собирал pid, возвращаемый каждым вызовом, и явно ждал этих pid.