Объясните, как работает сценарий AWK - PullRequest
0 голосов
/ 07 мая 2020

Кто-нибудь может объяснить, как это работает:

$ cat dup.awk
{   fields[$COL]++
    if (fields[$COL] == 1) {
        cache[$COL] = $0
    } else {
        if (fields[$COL] == 2) {print cache[$COL]}
        print $0
    }
}

$ awk -f dup.awk -vCOL=2 ./file

Я знаю, что это делает, но КАК Я не могу понять.

Особенно интересует это: foo[$BAR]++

Заранее благодарю за помощь!

1 Ответ

0 голосов
/ 07 мая 2020

awk работает с одной записью (строкой) одновременно с правилами. У вас есть 1 правило, и вы передаете 1 переменную из командной строки -vCOL=2.

В вашем скрипте массив fields используется в качестве счетчика количества появлений каждого уникального 2-го поля.

fields[$COL]++

Затем он проверяет, было ли это первое появление значения для 2-го поля.

if (fields[$COL] == 1)

Если это было первое появление 2-го поля, он сохраняет все запись $0 в массиве cache проиндексирована вторым значением поля.

cache[$COL] = $0

В противном случае, если это второй раз, когда значение второго поля было замечено, выводится сохраненная запись, когда это второе поле значение было впервые обнаружено и распечатывает текущую запись под ним.

else {
    if (fields[$COL] == 2) {print cache[$COL]}
    ...
}

Затем скрипт выводит все оставшиеся записи.

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