假设我有一个如下列表:
8
382.34.6
sally
sally
8
923
183.3.3
183.3.3
183.3.3
8
我想统计每个唯一值重复的次数并得到如下输出:
8 3
382.34.6 1
sally 2
923 1
183.3.3 3
我需要运行什么命令才能执行此操作?如果有所不同,则列表来自搜索grep
。
答案1
尝试这个:
sort file | uniq -c | awk '{print $2,$1}'
输出:
183.3.3 3 382.34.6 1 8 3 923 1 莎莉 2
答案2
您可以通过 提供列表| sort | uniq -c | sort -n
,如下所示:
echo -e "8\n382.34.6\nsally\nsally\n8\n923\n183.3.3\n183.3.3\n183.3.3\n8" | \
sort | uniq -c | sort -n
1 382.34.6
1 923
2 sally
3 183.3.3
3 8
如果你想要值后面的计数,你可以附加| awk '{print $2,$1}'
答案3
一种选择是使用awk
如下方法:创建一个关联数组,以要计数的项目为键,并在每次读取相同项目时增加该数组;在输入结束时,遍历数组并打印键和计数:
your grep command | awk '{a[$0]++;next;}; END{for (i in a) print i,a[i];}'
一个可能的优点是,您可能能够直接在中进行模式匹配awk
,从而grep
完全消除即
awk '/your regex/{a[$0]++;next;}; END{for (i in a) print i,a[i];}'
答案4
尝试这个
stuff=(apple,boat,chicken)
for (i=0; i<${#stuff}; i=i+1); do
echo INPUT | grep ${stuff[i]} | wc
done
输入表示要搜索的文本。同时用您的单词填充数组。