Эта однострочная строка удаляет повторяющиеся строки из текстового ввода без предварительной сортировки.
Например:
$ cat >f
q
w
e
w
r
$ awk '!a[$0]++' <f
q
w
e
r
$
Оригинальный код, который я нашел в интернете, читал:
awk '!_[$0]++'
Это было еще более озадачивающим для меня, так как я принял _
особое значение в awk, как в Perl, но оказалось, что это просто имя массива.
Теперь я понимаю логику, стоящую за однострочником: каждая строка ввода используется в качестве ключа в хэш-массиве, таким образом, после завершения хеш-код содержит уникальные строки в порядке поступления.
Я хотел бы узнать, как именно это обозначение интерпретируется awk. Например, что !
означает знак взрыва ( ) и другие элементы этого фрагмента кода.
Как это работает?