
预期效果如下:
>>> 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 工具可以实现这个功能,懒人不想造轮子。
1 yanqiyu 327 天前 虽然没有这么好看,但是 uniq -c 就可以统计出现次数了,之后再按照要求重新排版应该就可以了 |
2 GPLer 327 天前 via Android sort + uniq + awk 组合实现 cat 1.txt | sort | uniq -c | sort -nr | awk 'BEGIN {print "Line\t| Times"} {printf "%s\t| %d\n", $2, $1}' 话说这种需求大模型确实秒了( |
3 GPLer 327 天前 via Android unix 哲学更推荐用多个命令组合来完成某个需求,如果真的需要**一个**工具,可以考虑包装个脚本。( |
4 NessajCN 327 天前 这类需求我一般直接搓个 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}") |
5 Tardis07 OP @yanqiyu 非常感谢,其实外观倒是无所谓,你的回复让我想起来之前 Linux Shell 去重的操作。目前`xxx | sort | uniq -c`就足以满足我的需求了,非常感谢。 |
6 lazyzhang &nbs; 327 天前 perl -lne 'BEGIN{print "Line\t|Times\n","-" x 15};$h{$_}++;END{print "$_\t| $h{$_}" for sort keys %h}' 1.txt |
7 ijustdo 326 天前 (base) [ghostwwl@ghostwwl shell]$ cat 1.txt|awk '{c[$0]++}END{for (i in c) print i " | " c[i]}'|sort -n -k 2 user_A | 3 user_B | 2 user_C | 1 |
8 DopaminePlz 318 天前 via Android DeeoSeek 耗时 112s: ``` sort 1.txt | uniq -c | awk 'BEGIN {print "Line | Times\n------------------"} {print $2 " | " $1}' | column -t -s "|" -o " | " ``` |