计算具有一个列值的行数是匹配的

时间:2017-02-07 09:26:51

标签: shell file awk

我想使用shell脚本或awk计算第一列中具有相同值但在第二列中具有不同值的行数。 对于例如文件由

组成
400.00     1234
400.00     2134
400.05     4314
400.05     9766

因此,计数应为2,2,......

4 个答案:

答案 0 :(得分:1)

只需awk就足够了,不需要其他工具,

awk '{unique[$1]++}END{for (i in unique) print i,unique[i]}' fileabc
400.05 2
400.00 2

答案 1 :(得分:0)

如何使用uniq的计数选项:

$ awk '{print $1}' inputfile | uniq -c
      2 400.00
      2 400.05

这假设在第一列中所有相同的值按顺序出现。如果不是这种情况,您可以在输入awk之前以数字方式对输入进行排序。

答案 2 :(得分:0)

这可能有效:

sort <file> | uniq | awk '{print $1}' | uniq -c

故障:

sort | uniq # Eliminates duplicate entries and sorts things for uniq calls

下一步:

 awk '{print $1}' # Extract the first column

最后

uniq -c # Count the number of entries with a identical values in column 1.

答案 3 :(得分:0)

无论您的输入文件是否已排序,此awk单行程序都会为您计算:

awk '{a[$1]+=($0 in b)?0:1;b[$0]}END{for(x in a)print x":"a[x]}' file

我稍微更改了输入,以包含一些重复值:

kent$  cat f
400.00     1234
400.00     1234
400.00     1234
400.00     2134
400.05     4314
400.05     9766

kent$  awk '{a[$1]+=($0 in b)?0:1;b[$0]}END{for(x in a)print x":"a[x]}' f
400.05:2
400.00:2