Удаление дубликатов из определенных столбцов

Ваша цветовая схема терминала конфликтует с цветами GCC по умолчанию. То есть, черное на черном не видно. Это объясняется в руководстве:

Цвета определяются переменной окружения GCC_COLORS. Ее значение представляет собой список возможностей и Select Graphic Rendition (SGR), разделенный двоеточием. Rendition (SGR) подстроки. Команды SGR интерпретируются терминалом или эмулятором терминала. (См. раздел в документации вашего текстового терминала о допустимых значениях и их значениях как атрибуты символов.) Эти значения подстроки являются целыми числами в десятичном и могут быть объединены точкой с запятой. Общие значения 1 для полужирного начертания, 4 для подчеркивания, 5 для мерцания, 7 для инверсии, 39 для цвета переднего плана по умолчанию, 30 - 37 для цвета переднего плана, 90 до 97 для 16-цветного режима цветов переднего плана, 38;5;0 до 38;5;255 для 88- и 256-цветного режимов переднего плана цвета, 49 для цвета фона по умолчанию, от 40 до 47 для фоновых цвета, 100 - 107 для фоновых цветов 16-цветного режима, и 48;5;0 - 48;5;255 для 88- и 256-цветного режимов фоновых цветов. цвета.

По умолчанию GCC_COLORS имеет значение. error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01 , где 01;31 - жирный красный, 01;35 - жирный пурпурный, 01;36 - жирный голубой, 01;32 - жирный зеленый и 01 - жирный зеленый. Установка GCC_COLORS в значение пустая строка отключает цвета. Поддерживаются следующие возможности следующим образом.

Вы сможете изменить переменную окружения GCC_COLORS, чтобы изменить quote на другой цвет, что-то вроде 01;34. Более подробная информация содержится на странице Википедии об управляющих кодах ANSI.

1
11.04.2019, 15:44
2 ответа

сawk:

awk -F, '{
    printf $1 FS $2 FS; 
    split($3, arr, / +/); for(val in arr) !uniq_arr[ arr[val] ]++;
    for (key in uniq_arr) { 
        printf (key!="")? SPACE key:""; SPACE=" "; delete uniq_arr[key]
    };
    printf FS $4"\n"
}' infile

[1], Value1, UAC, AB
[2.2], Check1, D2A BOH, SD
[63], name2, MFB, k
  • Это split($3, arr, / +/)разбивает столбец #3 на массив arrна основе разделителя пробелов (, может быть один -или -больше пробелов в качестве разделителя ).

  • В for(val in arr) !uniq_arr[ arr[val] ]++мы создаем новый массив с удаленными повторяющимися значениями, взятыми из массива arr; поэтому окончательные значения в массиве uniq_arrявляются уникальными значениями только в каждом столбце3.

  • затем мы просто печатаем сохраненные значения в uniq_arrи удаляем этот ключ после того, как он напечатан; обратите внимание, что значения столбцов #1, #2 и #4 печатались отдельно.

см. также:

0
28.01.2020, 02:11

enter image description here

Uniq -опция f поможет вам проверить

-1
28.01.2020, 02:11

Теги

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