列出唯一的,并计算字符串后的第一个数字匹配



我想在特定字符串后面列出每个唯一的数字,以及这个数字在文件中出现的次数。特定字符串将是"长度"及其后的第一个数字。

当前数据,例如:

*random string* length: 40
*random string* length: 54
*random string* length: 40
*random string* length: 60
*random string* length: 60
*random string* length: 60

理想的结果是:

length 40: 2
length 54: 1
length 60: 3

目前,我正在编写一个24111行文件中手动看到的每个数字的计数脚本,这是不实用的。

cat file.txt | awk '/length: 60/ {total++} END {print total}'

使用您显示的示例,请尝试以下awk代码。

awk '
match($0,/length: [0-9]+/){
cnts[substr($0,RSTART,RLENGTH)]++
}
END{
for(key in cnts){
print key": "cnts[key]
}
}
' Input_file

解释:使用match函数匹配所有行中的字符串length: digits,然后创建带有第二个字段的数组,并不断将其值添加到同一索引中。在代码的END块中,根据所示的所需输出打印数组的索引和值。

如果您不在乎计数出现在输出中的位置:

$ sed 's/.*(length):/1/' file | sort | uniq -c
2 length 40
1 length 54
3 length 60

或者,如果您需要问题中的输出格式:

$ sed 's/.*(length):/1/' file | sort | uniq -c | awk '{print $2, $3":", $1}'
length 40: 2
length 54: 1
length 60: 3

这可能对你有用(GNU sed(:

sed -E 's/.* (S+:.*)/1 1/;H;x;s/(n[^:]*: S+ )(S+)(.*)1.*$/1$((2+1))3/
x;$!d;x;s/.(.*)/echo "1"/e' file

删除每行开头的垃圾并添加一个计数器。

将修改后的行附加到保留空间,如果行已经存在,则增加计数器(删除重复行(,然后删除当前行。

在文件末尾,切换到保留空间,删除保留空间开头引入的换行符,创建一个echo命令并对其进行评估。

最新更新