LINUX.ORG.RU

awk - Удаление «дубликатов» строк в csv файле, при совпадении нескольких полей.

 ,


1

2

Не могу сообразить, как бы это реализовать на awk...

Есть csv файл с содержимым:

1;500;01.01.1980;Иванов;Иван;Иванович
2;350;02.02.1985;Петров;Петр;Петрович
3;400;01.01.1980;Иванов;Иван;Иванович
4;200;05.07.1990;Сидоров;Сидор;Сидорович
5;150;05.07.1990;Сидоров;Сидор;Сидорович

Необходимо удалить дубли «строк» по колонкам ДР и ФИО, т.е. оставить только первое уникальное вхождение строки с этими колонками, а остальные удалять без оглядки на первые две колонки, на выходе должно получиться:

1;500;01.01.1980;Иванов;Иван;Иванович
2;350;02.02.1985;Петров;Петр;Петрович
4;200;05.07.1990;Сидоров;Сидор;Сидорович


Последнее исправление: karasic (всего исправлений: 1)

в awk массивы являются мапками: бери массив, индексом у него будет $3 + $4 + $5 + $6, а значением - 1 или 0

BreadFan ★★
()

Как-то так:

BEGIN {
    n = 0;
}

{
    val = $3 ";" $4 ";" $5 ";" $6;
    if (!(val in seen)) {
        seen[val] = 1;
        lines[n] = $0;
        n++;
    }
}

END {
    for (line in lines) {
        print lines[line];
    }
}
Я давно на awk не писал, решил вспомнить, но может можно и проще записать.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от vodz

Незачем, так тужился вспоминая синтаксис и семантику, что кучу лишнего сделал.

xaizek ★★★★★
()
Ответ на: комментарий от BreadFan

Да, с этой командой всё работает как надо. Спасибо.

karasic
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.