perl/python/bash脚本从文件中获取值并对它们进行分组
问题描述:
我需要处理来自不同文件的值。我有5个输入,成功,手动,重试,当前。每个目录有多个*.txt
文件。每个.txt
文件都有hostname=<hostname>
。我想知道每个主机名有多少个文件在输入,成功,重试,当前和手动目录。perl/python/bash脚本从文件中获取值并对它们进行分组
例如,
input
-> A.txt (HOSTNAME=host1)
-> B.txt (HOSTNAME=host2)
-> C.txt (HOSTNAME=host3)
-> D.txt (HOSTNAME=host1)
success
-> P.txt (HOSTNAME=host1)
-> Q.txt (HOSTNAME=host2)
-> R.txt (HOSTNAME=host1)
OUTPUT
Host | Input | Success | Current | Retry | Manual
host1 | 2 | 2 | 0 | 0 | 0
host2 | 1 | 1 | 0 | 0 | 0
host3 | 1 |0 | 0 | 0 | 0
想知道在perl,python或bash中是否有这样的库。
答
我建议你写一个适当的bash脚本,或者更好的办法是采用一种全功能的脚本语言。
这里有一个算法,将工作:
- 每个目录列表:
- 得到
*.txt
文件 - 打开每个文件
- 列表读取文件的每一行寻找一个匹配
- 在匹配的文件,增加一个双乐vel hash/dict/object/map/associative数组(或任何您选择的语言调用它们)由主机和目录键入。记录在列表中找到的主机名。
- 得到
- 从主机名的列表中删除重复
- 排序主机名
- 使用主机名的名单,目录列表和主机数的哈希打印表的列表。
这是a link to Perl's built in functions organized by category。使用正则表达式,文件和目录的东西特别相关。
你有没有尝试过这方面的锻炼? – ssr1012
听起来像是对我功课。请告诉我们到目前为止您尝试了些什么。 –
bash-3.2 $ cat ./input/* |排序| uniq -c | sort -nr | awk'{print $ 2''$ 1}' HOSTNAME = host1 2 HOSTNAME = host3 1 HOSTNAME = host2 1 bash-3.2 $ cat ./success/* |排序| uniq -c | sort -nr | awk'{print $ 2''$ 1}' HOSTNAME = host1 2 HOSTNAME = host2 1 – PrMeAsAr