重新排列列的元素并显示计数

发布于 2024-08-19 19:21:05 字数 230 浏览 5 评论 0原文

我有这样的文本文件:

i
am 
fine
how
are
you
what
i
how
are

我需要如下所示的输出:

i : 2
am : 1
fine : 1
how : 2
are : 2
you : 1
what : 1

可以有很多单词的重复: 我如何使用 shell 脚本或 awk 来做到这一点?

i have text file like this:

i
am 
fine
how
are
you
what
i
how
are

i need an output like below:

i : 2
am : 1
fine : 1
how : 2
are : 2
you : 1
what : 1

there can be many repititions of the words:
how could i do this using a shell script or an awk?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

飘落散花 2024-08-26 19:21:05
sort | uniq -c

它对其进行排序,并且默认情况下计数位于行之前。那行得通吗?

sort | uniq -c

It sorts it and the count is by default before the line. Would that work?

甜味拾荒者 2024-08-26 19:21:05
awk '{ count[$1]++ }
    END { for (a in count) printf("%s : %d\n", a, count[a]) }' filename

awk 有关联数组,所有变量都初始化为 0,所以上面的代码按预期工作。

awk '{ count[$1]++ }
    END { for (a in count) printf("%s : %d\n", a, count[a]) }' filename

awk has associative arrays, and all the variables are initialized to 0, so the above works as expected.

不顾 2024-08-26 19:21:05

@OP,如果你想保留订单

awk ' { a[$0]++; d[NR]=$0 }
END{
 for(i=1;i<=NR;i++){
    if( ! (d[i] in p)  ){
        print a[d[i]],d[i]
        p[d[i]]
    }
 }
} ' file

输出

$ ./shell.sh
2 i
1 am
1 fine
2 how
2 are
1 you
1 what

@OP, if you want to preserve the order

awk ' { a[$0]++; d[NR]=$0 }
END{
 for(i=1;i<=NR;i++){
    if( ! (d[i] in p)  ){
        print a[d[i]],d[i]
        p[d[i]]
    }
 }
} ' file

output

$ ./shell.sh
2 i
1 am
1 fine
2 how
2 are
1 you
1 what
失退 2024-08-26 19:21:05

在 Perl 中:

perl -le'while (<>){ chomp; $seen{$_}++}; print map { $_ . " : " . $seen{$_} } keys %seen'

In Perl:

perl -le'while (<>){ chomp; $seen{$_}++}; print map { $_ . " : " . $seen{$_} } keys %seen'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文