Поиск уникальных вхождений в CSV на основе определенного поля в оболочке - PullRequest
0 голосов
/ 27 мая 2018

У меня есть файл emails.csv:

>cat emails.csv
1,joe,joe@gmail.com,32
2,jim,jim@hotmail.fr,23
3,steve,steve_smith@temporary.com.br,45
4,joseph,joseph@protonmail.com,23
5,jim,jim29@bluewin.ch,29
6,hilary,hilary@bluewin.ch,32

Я хочу сохранить только первую запись, когда нахожу другую запись с тем же последним полем (возраст) - уникальные записи, основанные на последнем поле.Вывод, который мне нужен:

1,joe,joe@gmail.com,32
2,jim,jim@hotmail.fr,23
3,steve,steve_smith@temporary.com.br,45
5,jim,jim29@bluewin.ch,29

Следующий скрипт может выполнить фильтрацию:

> cut -d, -f4 emails.csv |
> while read age1;
> do line=1;continue_loop=1 cut -d, -f4 emails.csv | while read age;
> do if [[ $age1 == $((age)) ]] && [[ $continue_loop == $1 ]];
> then cat emails.csv | head -n $line | tail -n 1;
> continue_loop=0; fi;
> let line++;
> done;
> done | sort

Однако я ищу решение, которое не требует двухциклы, поскольку это кажется немного сложным.

1 Ответ

0 голосов
/ 27 мая 2018
sort -t, -k4 emails.csv | sed -e 's/,/ /g' | uniq -f3 | sed -e 's/ /,/g'

Но, похоже, некоторые другие языки, такие как Perl или Pyhon, помогут вам написать более стабильное и не такое уродливое решение

...