
Недавно я наткнулся на 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 }
, которое печатает текущую запись, которая для всех учетных записей и целей в этом примере является текущей неизмененной строкой ввода.