как работает опция awk seen

как работает опция awk seen

Недавно я наткнулся на awkвидимыйoption. Я вижу, что это удаление дубликатов в файлах. Мне бы хотелось получить разъяснения о том, как это работает.

cat tes
1
2
3
1
1
1
3
4

с awk видел вывод

cat tes | awk '!seen[$0]++'

1
2
3
4

решение1

seen— произвольное имя ассоциативного массива. Это не опция любого рода. Вы можете использовать aили bили большинство других имен вместо него.

Код !seen[$0]++состоит из теста и приращения.

Если seen[$0], т.е. значение элемента массива, связанного с ключом $0, текущей строкой ввода, равно нулю (или пусто), то логическое значение !seen[$0]равноистинный.

Затем значение в массиве, соответствующее ключу, $0увеличивается, что означает, что тест будетЛОЖЬво всех остальных случаях, когда будет найдено то же самое значение $0.

Эффект заключается в том, что тестистинныйкогда определенная строка впервые появляется во входных данных, иЛОЖЬвсе остальное время.

Всякий раз, когда тест без связанного с ним действияистинный,по умолчаниюдействие инициируется. Действие по умолчанию эквивалентно { print }или { print $0 }, которое печатает текущую запись, которая для всех учетных записей и целей в этом примере является текущей неизмененной строкой ввода.

Связанный контент