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

14 小时 18 分钟前
 Tardis07

预期效果如下:

>>> 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 工具可以实现这个功能,懒人不想造轮子。

483 次点击
所在节点    Linux
6 条回复
yanqiyu
14 小时 14 分钟前
虽然没有这么好看,但是 uniq -c 就可以统计出现次数了,之后再按照要求重新排版应该就可以了
GPLer
14 小时 12 分钟前
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
14 小时 10 分钟前
unix 哲学更推荐用多个命令组合来完成某个需求,如果真的需要**一个**工具,可以考虑包装个脚本。(
NessajCN
13 小时 58 分钟前
这类需求我一般直接搓个 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
13 小时 34 分钟前
@yanqiyu 非常感谢,其实外观倒是无所谓,你的回复让我想起来之前 Linux Shell 去重的操作。目前`xxx | sort | uniq -c`就足以满足我的需求了,非常感谢。
lazyzhang
5 小时 22 分钟前
perl -lne 'BEGIN{print "Line\t|Times\n","-" x 15};$h{$_}++;END{print "$_\t| $h{$_}" for sort keys %h}' 1.txt

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1107029

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX