Трубопровод сценария Awk меняет видимый порядок выполнения - PullRequest
0 голосов
/ 13 мая 2018

Ниже приведен сегмент моего скрипта:

END{
    for (key in data) {
        print key" "data[key]|"sort -k 2n";
    }
    print "something or other"
}

Проблема в том, что вывод консоли сначала показывает второй вывод печати, а затем показывает результат выводов печати, переданных по каналу сортировки в forпетля.

Пробовал жесткие брекеты безрезультатно.Я понятия не имею, как даже Google об этой проблеме, как сортировка собирать то, что она должна сортировать?Как я могу направить это лучше?

Редактировать: Только что был момент реализации, проблема не в том, что он ловит последний отпечаток, а в том, что он фактически выполняется после последнего отпечатка, несмотря на то, что вызывается раньше.

1 Ответ

0 голосов
/ 13 мая 2018

Ответом является функция close (), предложенная Эдом Мортоном.

Для получения подробной информации о close () я нашел https://www.gnu.org/software/gawk/manual/html_node/Close-Files-And-Pipes.html полезной.

Правильный кодсегмент, таким образом, стал:

END{
    for (key in data) {
        print key" "data[key]|"sort -k 2n";
    }
    close("sort -k 2n");
    print "something or other";
}

таким образом, он правильно печатает отсортированный вывод из цикла for, и только после этого выводит последний вывод печати, вызванный после цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...