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