计算行数并按前缀词分组

Woj*_*h K 6 unix linux bash command-line

我想计算文档中的行数并按前缀词对其进行分组。前缀是一组由第一个下划线分隔的字母数字字符。我不太关心对它们进行排序,但最好按出现次数降序列出它们。

该文件如下所示:

prefix1_data1
prefix1_data2_a
differentPrefix_data3
prefix1_data2_b
differentPrefix_data5
prefix2_data4
differentPrefix_data5
Run Code Online (Sandbox Code Playgroud)

输出应如下所示:

prefix1           3
differentPrefix   3
prefix2           1
Run Code Online (Sandbox Code Playgroud)

我已经在 python 中做到了这一点,但我很好奇是否可以使用命令行或 bash 脚本更有效地做到这一点?uniq命令有-c-w选项,但前缀的长度可能会有所不同。

Rom*_*est 7

使用sed,sortuniq命令组合的解决方案:

sed -rn 's/^([^_]+)_.*/\1/p' testfile | sort | uniq -c
Run Code Online (Sandbox Code Playgroud)

输出:

3 differentPrefix
3 prefix1
1 prefix2
Run Code Online (Sandbox Code Playgroud)

^([^_]+)__- 匹配从字符串开头到第一次出现下划线的子字符串(前缀,包含除 之外的任何字符)_


oli*_*liv 6

你可以使用awk

awk -F_ '{a[$1]++}END{for(i in a) print i,a[i]}' file
Run Code Online (Sandbox Code Playgroud)

字段分隔符设置为_

数组a填充了所有第一个元素及其关联的计数。

解析文件时打印数组内容