Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 基于shell中的某个字段在csv中查找唯一的ocurrence_Bash_Shell_Cut_Uniq - Fatal编程技术网

Bash 基于shell中的某个字段在csv中查找唯一的ocurrence

Bash 基于shell中的某个字段在csv中查找唯一的ocurrence,bash,shell,cut,uniq,Bash,Shell,Cut,Uniq,我有一个文件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 当我发现另一个条目具有相同的最后一个字段(年龄)-基于最后一个字段的唯

我有一个文件
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
然而,我正在寻找一种不需要两个循环的解决方案,因为这似乎有点过于复杂

sort -t, -k4 emails.csv | sed -e 's/,/ /g' | uniq -f3 | sed -e 's/ /,/g'

但似乎其他一些语言,如Perl或Pyhon,将帮助您编写更稳定且不那么难看的解决方案

谢谢,我不知道uniq可以以这种方式使用。