【发布时间】:2014-10-16 12:20:29
【问题描述】:
我有一个用 ; 分隔的 csv。我需要删除第 2 列和第 3 列的内容不唯一的行,并将材料传送到标准输出。
示例输入:
irrelevant;data1;data2;irrelevant;irrelevant
irrelevant;data3;data4;irrelevant;irrelevant
irrelevant;data5;data6;irrelevant;irrelevant
irrelevant;data7;data8;irrelevant;irrelevant
irrelevant;data1;data2;irrelevant;irrelevant
irrelevant;data9;data0;irrelevant;irrelevant
irrelevant;data1;data2;irrelevant;irrelevant
irrelevant;data3;data4;irrelevant;irrelevant
期望的输出
irrelevant;data5;data6;irrelevant;irrelevant
irrelevant;data7;data8;irrelevant;irrelevant
irrelevant;data9;data0;irrelevant;irrelevant
我找到了只将第一行打印到输出的解决方案:
sort -u -t ";" -k2,1 file
但这还不够。
我尝试使用uniq -u,但找不到只检查几列的方法。
【问题讨论】:
-
在所有行中,第 2 列和第 3 列中没有唯一值。
-
我同意@jaypal,这个问题是关于仅查找唯一记录的。
-
@AvinashRaj:OP 想要列出那些
col2, col3在整个文件中只出现一次的记录。 -
哦,谢谢@anubhava
-
是的,@anubhava 是对的。将材料存储在一些临时模板中似乎是唯一的方法。 awk 和 perl 的解决方案似乎都非常相似。
标签: bash shell sorting csv uniq