如何根据第一个字段和第二个字段的前 n 个字符删除 CSV 中的重复行?

如何根据第一个字段和第二个字段的前 n 个字符删除 CSV 中的重复行?

对于 3 列 csv 文件list.csv,如何删除第一个字段匹配的后续重复行,并且仅第二个字段匹配的前 3 个字符?某些行的第二个字段的字符数少于 3 个。

列表.csv:

12,12345,a
12,12345,b
123,12345,a
1234,12,b
1234,12345,a
567,567,a
567,56712,a
567,56734,a
567,6789,a

预期输出:

12,12345,a
123,12345,a
1234,12,b
1234,12345,a
567,567,a
567,6789,a

答案1

sort应该也可以

 sort -t, -k1,1 -k2.1,2.3 -u <list.csv
 12,12345,a
 123,12345,a
 1234,12,b
 1234,12345,a
 567,567,a
 567,6789,a

答案2

awk -F, '!seen[$1,substr($2,1,3)]++' list.csv 
12,12345,a
123,12345,a
1234,12,b
1234,12345,a
567,567,a
567,6789,a

相关内容