我不是 bash 高手,我有一个包含如下行的文件:
timestamp1 value1 value2 value3 username host
我想打印所有 values3 和 values2,每次主机相同时它们都会不同,假设 X 次。我知道如何对每个主机进行 grep 和对列进行 awk,但是我不知道如何设置变量的计数?
例如 - 如果主机在文件中出现 5 次,我想打印这 5 行。但这里的问题是我不知道主机所以我需要在变量中指定它并以某种方式计算它?
最佳答案
单行解决方案
假设您的文件名为 lst
这是单行代码:
grep -Ff <(awk '{print $6}' lst | sort | uniq -c | awk '$1 == 5 {print $2}') lst
会发生什么?
- 从文件中提取所有主机名
- 对于每个主机名,计算出现的次数
- 只打印恰好出现 5 次的主机名
- Grep 过滤掉主机名的文件
注意:
- 主机名不得出现在其他字段中(会导致误报)。
- 输出按原始文件排序(可能未根据主机名排序)。但是,您可以添加
|排序
到命令的末尾。
关于linux - bash 显示每个变量计数的所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42839679/