linux - 计算模式在文本文件中出现的次数
问题描述
我有一个这样的文本文件:
2 29 31 36 44 50 54
15 16 19 25 50 54 29
9 11 14 20 24 44 30
12 13 15 34 36 47 28
12 28 3 40 45 52 46
5 23 24 33 48 50 1
5 10 11 17 39 48 35
3 17 21 36 37 40 53
11 20 27 50 54 55 24
我想计算每个数字重复多少次,所以我使用这个脚本:
#!/bin/bash
for n in {1..56}
do
echo $n >> barchart.txt
grep -o -i $n text_file.txt | wc -l >> barchart.txt
done
我工作正常,唯一的问题是当我搜索 1 时,它也将 10,11,12...,19 视为 1。我想知道 1 单独重复了多少次,所有的都会发生同样的情况一个数字的数字:2,3,4,5,6,7,8 和 9。我尝试做类似的事情:“$n”或“$n”,但它不起作用,我也在看grep 的选项,但我没有看到正确的选项
解决方案
这个工作比较适合awk
。
考虑这个gnu-awk
命令:
awk -v RS='[[:space:]]+' '{++freq[$1]} END{for (i in freq) print i, freq[i]}' file
1 1
2 1
3 2
5 2
9 1
10 1
11 3
12 2
13 1
14 1
15 2
16 1
17 2
19 1
20 2
21 1
23 1
24 3
25 1
27 1
28 2
29 2
30 1
31 1
33 1
34 1
35 1
36 3
37 1
39 1
40 2
44 2
45 1
46 1
47 1
48 2
50 4
52 1
53 1
54 3
55 1
如果你没有,gnu-awk
那么你可以使用这个 POSIX awk 命令:
awk '{for (i=1; i<=NF; i++) ++freq[$i]} END{for (i in freq) print i, freq[i]}' file
推荐阅读
- java - 如何区分 kotlin 的类继承(在 java 中扩展)和接口实现(在 中实现)这里 kotlin 使用 (:) 两者?
- visual-studio - 如何将 Sublime Text 语法高亮文件转换为 Visual Studio 的 textmate 语法?
- java - Spring 依赖注入在 ConstraintValidator 中不起作用
- c - 循环可以在每次运行时创建一个新的、不同的数组吗?
- php - 尝试使用 Ajax 数据库调用填充动态表单字段
- xslt - 在包含反斜杠的“测试”字符串中使用 XSLT 变量
- .net - 通过 Unix 时间戳对 System.DateTime 实例的往返转换延迟 1 小时
- arrays - 查找其值接近另一个向量的元素的向量位置
- php - Laravel groupBy 和原始查询
- python - Python isinstance 不适用于 if 语句。