Использование 1-го[N] символа при проверке на дубликат

Оказалось, что это ошибка VLAN с моей стороны.

В итоге я создал второй интерфейс моста на втором порту Ethernet, привязал его к сети 192.168.2.0 VLAN, изменил виртуальную машину на использование нового моста и пуп

1
13.10.2016, 11:39
2 ответа

Использование awk

В ваших примерах первые шесть символов сопровождаются точкой. Если это всегда так, то:

$ 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 до того, как мы прочитаем следующую строку.

Использование uniq

Для справки тем, кто, в отличие от OP, имеет доступ к версии uniq с параметром -w , затем:

$ uniq -w6 File
AAAPOL.0001
AAAPRO.0001
AAAXEL.0002
AAAJOK.1111
1
27.01.2020, 23:35

Если вас не волнует порядок изменения строк, вы можете использовать sort -u с установленным ключом сортировки к этим первым 6 символам:

sort -u -k 1,1.6

Или к части перед . :

sort -t . -u -k 1,1
1
27.01.2020, 23:35

Теги

Похожие вопросы