У меня большой текст на сервере 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
), добавив полученные значения в качестве последнего поля.