我尝试按一列的值过滤我的CSV,然后根据2列的值删除重复的行。为简单起见,这是一个例子。我想根据列ID1,ID2和Year删除重复的行。我还想通过仅用" 3"拉回行来过滤我的结果。在VALUE列中。
ID1,ID2,YEAR,LAT,LON,VALUE
A,B,2016,123,456,3
A,B,2016,133,466,3
A,B,2016,122,446,3
C,D,2015,223,456,3
C,D,2015,241,455,3
A,B,2016,123,456,2
A,B,2016,133,466,2
A,B,2016,122,446,2
C,D,2015,223,456,2
C,D,2015,241,455,2
结果:
ID1,ID2,YEAR,LAT,LON,VALUE
A,B,2016,123,456,3
C,D,2015,223,456,3
答案 0 :(得分:0)
您可以使用awk
使用带键的关联数组作为复合值commprising $1,$2,$3
:
awk -F, '$NF==3 && !seen[$1,$2,$3]++' file.csv
ID1,ID2,YEAR,LAT,LON,VALUE
A,B,2016,123,456,3
C,D,2015,223,456,3
答案 1 :(得分:0)
此解决方案假设与上面提到的相同,但是在更大的扩展版本中。
如果值中有awk
,则,
个解决方案都无法正常工作。然后,您可以使用csvtool
来分隔值。
cat file1 | awk -F, ' $NF==3 {unq[$1,$2,$3]=$0} END{for (i in unq){print unq[i] }}'