预期效果如下:
>>> 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 11 小时 49 分钟前
虽然没有这么好看,但是 uniq -c 就可以统计出现次数了,之后再按照要求重新排版应该就可以了
|
2
GPLer 11 小时 48 分钟前 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}' 话说这种需求大模型确实秒了( |
3
GPLer 11 小时 45 分钟前 via Android
unix 哲学更推荐用多个命令组合来完成某个需求,如果真的需要**一个**工具,可以考虑包装个脚本。(
|
4
NessajCN 11 小时 34 分钟前
这类需求我一般直接搓个 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 2 小时 58 分钟前
perl -lne 'BEGIN{print "Line\t|Times\n","-" x 15};$h{$_}++;END{print "$_\t| $h{$_}" for sort keys %h}' 1.txt
|