我想使用shell脚本或awk计算第一列中具有相同值但在第二列中具有不同值的行数。 对于例如文件由
组成400.00 1234
400.00 2134
400.05 4314
400.05 9766
因此,计数应为2,2,......
答案 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