V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
Tardis07
V2EX  ›  Linux

Linux Shell 如何分类统计标准输出结果

  •  
  •   Tardis07 ·
    Tardis07 · 4 小时 21 分钟前 · 345 次点击

    预期效果如下:

    >>> cat 1.txt                                                                                                                                                                                
    user_A
    user_B
    user_C
    user_A
    user_B
    user_A
    
    >>> cat 1.txt | some_command
    Line	| Times
    ------------------
    user_A	| 3
    user_B	| 2
    user_C	| 1
    
    

    是否存在已知的一个 Linux 工具可以实现这个功能,懒人不想造轮子。

    5 条回复    2025-01-22 12:31:23 +08:00
    yanqiyu
        1
    yanqiyu  
       4 小时 17 分钟前
    虽然没有这么好看,但是 uniq -c 就可以统计出现次数了,之后再按照要求重新排版应该就可以了
    GPLer
        2
    GPLer  
       4 小时 16 分钟前 via Android   ❤️ 1
    sort + uniq + awk 组合实现

    cat 1.txt | sort | uniq -c | sort -nr | awk 'BEGIN {print "Line\t| Times"} {printf "%s\t| %d\n", $2, $1}'

    话说这种需求大模型确实秒了(
    GPLer
        3
    GPLer  
       4 小时 14 分钟前 via Android
    unix 哲学更推荐用多个命令组合来完成某个需求,如果真的需要**一个**工具,可以考虑包装个脚本。(
    NessajCN
        4
    NessajCN  
       4 小时 2 分钟前
    这类需求我一般直接搓个 python 脚本
    d = {}
    with open(sys.argv[1]) as fp:
    for l in fp.readlines():
    k = l.strip("\n")
    if not k in d:
    d[k]=1
    else:
    d[k]+=1
    print("Line\t| Times")
    print("-------------")
    for c,t in d.items():
    print(f"{c}\t| {t}")
    Tardis07
        5
    Tardis07  
    OP
       3 小时 38 分钟前
    @yanqiyu 非常感谢,其实外观倒是无所谓,你的回复让我想起来之前 Linux Shell 去重的操作。目前`xxx | sort | uniq -c`就足以满足我的需求了,非常感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5244 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 08:09 · PVG 16:09 · LAX 00:09 · JFK 03:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.