awk +如何在列中找到重复项?

时间:2015-08-19 01:00:43

标签: awk

如何在列中找到重复项?

$ 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

3 个答案:

答案 0 :(得分:10)

这将为您提供重复的代码

"NA"

如果您只对重复代码的数量感兴趣

awk -F, 'a[$5]++{print $5}'

要打印重复的行,请尝试以下

awk -F, 'a[$5]++{count++} END{print count}'

答案 1 :(得分:3)

这是我可以猜到的记忆力下降:

$ cat infile
country,latitude,longitude,name,code
AD,42.546245,1.601554,Andorra,376
AE,23.424076,53.847818,United Arab Emirates,971
AF,33.93911,67.709953,Afghanistan,93
AG,17.060816,-61.796428,Antigua and Barbuda,1
AI,18.220554,-63.068615,Anguilla,1
AL,41.153332,20.168331,Albania,355
AM,40.069099,45.038189,Armenia,374
AN,12.226079,-69.060087,Netherlands Antilles,599
AO,-11.202692,17.873887,Angola,355

$ awk -F\, '$NF in a{if (a[$NF]!=0){print a[$NF];a[$NF]=0}print;next}{a[$NF]=$0}' infile
AG,17.060816,-61.796428,Antigua and Barbuda,1
AI,18.220554,-63.068615,Anguilla,1
AL,41.153332,20.168331,Albania,355
AO,-11.202692,17.873887,Angola,355

注意:我已经包含了另一个副本用于测试目的。

答案 2 :(得分:0)

如果您只想打印出重复相同文件的唯一值,只需在awk末尾添加:

awk ... ... | |排序uniq -u

这将仅按字母顺序打印唯一值