【发布时间】:2020-10-13 22:44:15
【问题描述】:
如何在列中查找重复项?
$ head countries_lat_long_int_code3.csv | cat -n
1 country,latitude,longitude,name,code
2 AD,42.546245,1.601554,Andorra,376
3 AE,23.424076,53.847818,United Arab Emirates,971
4 AF,33.93911,67.709953,Afghanistan,93
5 AG,17.060816,-61.796428,Antigua and Barbuda,1
6 AI,18.220554,-63.068615,Anguilla,1
7 AL,41.153332,20.168331,Albania,355
8 AM,40.069099,45.038189,Armenia,374
9 AN,12.226079,-69.060087,Netherlands Antilles,599
10 AO,-11.202692,17.873887,Angola,244
例如,这在第 5 列中有重复项。
5 AG,17.060816,-61.796428,Antigua and Barbuda,1
6 AI,18.220554,-63.068615,Anguilla,1
如何查看此文件中的所有其他内容?
我知道我能做到:
awk -F, 'NR>1{print $5}' countries_lat_long_int_code3.csv | sort
而且我可以目测看看是否有重复,但有没有更好的方法?
或者我可以这样做: 找出完全有可能的情况
$ awk -F, 'NR>1{print $5}' countries_lat_long_int_code3.csv | sort | wc -l
210
找出有多少唯一值
$ awk -F, 'NR>1{print $5}' countries_lat_long_int_code3.csv | sort | uniq | wc -l
183
因此最多有 27 (210-183) 个重复。
EDIT1
我想要的输出如下所示,基本上是所有列,但只显示重复的行:
5 AG,17.060816,-61.796428,Antigua and Barbuda,1
6 AI,18.220554,-63.068615,Anguilla,1
【问题讨论】:
-
awk -F, 'NR>1{print $5}' countries_lat_long_int_code3.csv | sort | uniq -c | grep -v '^ *1 *'呢? Taht 将使用 uniq -c 对所有重复的行进行分组,并删除所有出现一次的行。 -
你想要的输出是什么。重复代码、重复记录、唯一代码的计数?
-
你只关心第 5 个字段还是其他字段?
标签: awk