удалить количество дублирующихся строк на основе совпадения перед первой запятой

удалить количество дублирующихся строк на основе совпадения перед первой запятой

У меня большой текст на сервере Linux Centos 7, и я хотел бы удалить строки, которые совпадают до первой запятой.

Вход:

112112112,00,00,00
110110,01,01,02
112112112,11,11,888
110110,99,88,8
410410,22,22,22

Выход:

410410,22,22,22

решение1

Вот пара awkдвухпроходных решений. Первый проход сохраняет частоту поля 1 в массив x. Второй проход печатает строку, если xсообщает частоту поля 1 как 1

awk -F, 'first_pass{x[$1]++; next}; x[$1] == 1' first_pass=1 file first_pass=0 file

awk -F, 'BEGIN{while ((getline<ARGV[1]) > 0)x[$1]++}; x[$1] == 1' file

решение2

Короткий GNUdatamash+sedкомбинация:

datamash -sft',' -g1 count 1 <file | sed -n 's/,1$//p'

Первый процесс вышеуказанного конвейера подсчитает количество элементов в каждой группе значений первого поля (сгруппированных по -g1), добавив полученные значения в качестве последнего поля.

Связанный контент