В ваших примерах первые шесть символов сопровождаются точкой. Если это всегда так, то:
$ awk -F. '!c[$1]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111
Это работает с использованием .
как разделитель полей и отслеживает, сколько раз первое поле уже появлялось.
Если это не так, то:
$ awk '!c[substr($0, 1, 6)]++' File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111
substr ($ 0, 1, 6)
- это первые шесть символов строки. Ассоциативный массив c
отслеживает, сколько раз мы видели эти первые шесть символов. Таким образом, если c [substr ($ 0, 1, 6)]
не равно нулю, мы уже видели эти символы, и строка не должна печататься. В awk ненулевое значение означает истину. Итак, мы инвертируем тест с помощью !
: это означает, что ! C [substr ($ 0, 1, 6)]
истинно, если эти шесть символов не видели раньше. Завершающий ++
обновляет счетчик в c
до того, как мы прочитаем следующую строку.
Для справки тем, кто, в отличие от OP, имеет доступ к версии uniq
с параметром -w
, затем:
$ uniq -w6 File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111