我有一个这种格式的配置文件:
cod 11
loc1 23
pto1 33
loc2 55
pto2 66
cod 12
loc1 55
pto1 66
loc2 88
pto2 77
...
我想计算一对数字在序列loc / pto中出现的次数(与loc / pto号无关)。在这个例子中,情侣55/66出现2次(一次是loc1 / pto1,一次是loc2 / pto2)。
我已经用Google搜索并尝试了grep
,uniq
和awk
的某些组合,但我只管理了计数单行或数字重复。我阅读了那些命令的man
文档,但没有发现任何与我的问题相关的线索。
答案 0 :(得分:1)
您可以使用以下内容:
$ sort file | uniq -f1 -dc
2 loc1 55
2 pto1 66
-f1
在比较行
-dc
正在打印重复的行及其关联计数
答案 1 :(得分:0)
如果您想知道文件中出现重复数字的次数:
awk '{print $2}' <filename> | sort | uniq -dc
Output:
2 55
2 66
如果您想知道某个号码出现在档案中的次数,无论是否重复:
awk '{print $2}' <filename> | sort | uniq -c
Output:
1 11
1 12
1 23
1 33
2 55
2 66
1 77
1 88
如果您想根据第二列打印重复匹配的整行:
awk '{print $2}' <filename> | sort | uniq -d | grep -F -f - <filename>
Output:
loc2 55
pto2 66
loc1 55
pto1 66
答案 2 :(得分:0)
尽管OP没有明显的努力,但这是一个有趣的问题。
awk '{for (i=1 ; i < 10 ; i++) if (NR == i) array[i]=$2} END {for (i=1 ; i < 10 ; i++) print array[i] "," array[i+1]}' file | sort | uniq -c
输出 -
1 11,23
1 12,55
1 23,33
1 33,55
2 55,66
1 66,12
1 66,88
1 88,
输出告诉你55后面是66两次。其他对只出现一次。
解释 -
我在awk
中定义了一个数组,其中元素是第二列中的i
数字。 END
之后的部分连接i
和i+1
元素。然后有sort | uniq -c
来查看这些对是否出现不止一次。