计算和打印文件中的出现次数
Counting and printing occurrences in a file
我有一个如下所示的文件:
cond1 20
cond1 10
cond1 5
cond2 12
cond3 10
cond3 9
cond3 1
cond4 2
cond5 10
cond5 8
我正在尝试按第一列对文件进行排序,然后是第二列,然后添加第三列,其中包含前两列中字符串的排名计数。它看起来像这样:
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
我知道有一些 awk 或 sed 命令可以做到这一点,但我似乎无法理解。 uniq -c
不符合我的要求。如有任何建议,我们将不胜感激。
$ awk '{print [=10=], ++rank[]}' file
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
如果您的原始输入文件尚未排序,则预先调用 sort
:
$ sort -k1,1 -k2,2nr file | awk '{print [=11=], ++rank[]}'
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
如果您希望间距在视觉上排列整齐,请附加对 column
:
的调用
$ awk '{print [=12=], ++rank[]}' file | column -t
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
根据口味混合搭配....
使用 sort
和 awk
,只要 awk 在 column1 中找到新单词(不使用数组),排序后只需重置变量 n
$ sort -k1,1 -k2,2nr file | awk '!=p{n=0; p=}{print [=10=],++n}'
输入
$ cat f
cond1 20
cond1 10
cond1 5
cond2 12
cond3 10
cond3 9
cond3 1
cond4 2
cond5 10
cond5 8
输出
$ sort -k1,1 -k2,2nr f | awk '!=p{n=0; p=}{print [=12=],++n}'
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
我有一个如下所示的文件:
cond1 20
cond1 10
cond1 5
cond2 12
cond3 10
cond3 9
cond3 1
cond4 2
cond5 10
cond5 8
我正在尝试按第一列对文件进行排序,然后是第二列,然后添加第三列,其中包含前两列中字符串的排名计数。它看起来像这样:
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
我知道有一些 awk 或 sed 命令可以做到这一点,但我似乎无法理解。 uniq -c
不符合我的要求。如有任何建议,我们将不胜感激。
$ awk '{print [=10=], ++rank[]}' file
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
如果您的原始输入文件尚未排序,则预先调用 sort
:
$ sort -k1,1 -k2,2nr file | awk '{print [=11=], ++rank[]}'
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
如果您希望间距在视觉上排列整齐,请附加对 column
:
$ awk '{print [=12=], ++rank[]}' file | column -t
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2
根据口味混合搭配....
使用 sort
和 awk
,只要 awk 在 column1 中找到新单词(不使用数组),排序后只需重置变量 n
$ sort -k1,1 -k2,2nr file | awk '!=p{n=0; p=}{print [=10=],++n}'
输入
$ cat f
cond1 20
cond1 10
cond1 5
cond2 12
cond3 10
cond3 9
cond3 1
cond4 2
cond5 10
cond5 8
输出
$ sort -k1,1 -k2,2nr f | awk '!=p{n=0; p=}{print [=12=],++n}'
cond1 20 1
cond1 10 2
cond1 5 3
cond2 12 1
cond3 10 1
cond3 9 2
cond3 1 3
cond4 2 1
cond5 10 1
cond5 8 2