如何从shell脚本中的csv文件中检索唯一行

时间:2018-02-07 05:14:23

标签: shell csv

我有像这样的.csv文件

1000|79|2017-01-27 16:53:00|dmp
1000|91|2017-01-27 16:53:00|cmk
1000|93|2017-01-27 16:53:00|rtf
1001|79|2017-01-27 16:58:22|dmp
1001|91|2017-01-27 16:58:22|elc
1001|93|2017-01-27 16:58:22|rtf
1002|79|2017-01-27 16:58:45|cmk
1002|91|2017-01-27 16:58:45|cmk
1003|79|2017-01-27 16:59:11|bdd
1004|79|2017-02-01 11:41:04|dmp  

我需要像这样设置数据

1000|79|2017-01-27 16:53:00|dmp
1001|79|2017-01-27 16:58:22|dmp
1002|79|2017-01-27 16:58:45|cmk
1003|79|2017-01-27 16:59:11|bdd
1004|79|2017-02-01 11:41:04|dmp  

如何通过使用shell脚本来实现这一点? 附:

我试图用以下命令做到这一点,但我不能用它来敲响它虽然它给出了唯一的值..

awk -F"|" '{print $1}' myfile.csv|sort|uniq  

谢谢

2 个答案:

答案 0 :(得分:2)

awk -F"|" '{if (!a[$1]) {a[$1]=1;print $0;}}' v1
1000|79|2017-01-27 16:53:00|dmp
1001|79|2017-01-27 16:58:22|dmp
1002|79|2017-01-27 16:58:45|cmk
1003|79|2017-01-27 16:59:11|bdd
1004|79|2017-02-01 11:41:04|dmp 

我认为你需要uniq第一列,对吗?

答案 1 :(得分:1)

sort --stable --field-separator='|' --key=1,1 -u your_file.csv

请注意,--stable-u一起确保,如果多行具有相同的密钥,则第一行将被采用。