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中是否有这样的库。

+2

你有没有尝试过这方面的锻炼? – ssr1012

+0

听起来像是对我功课。请告诉我们到目前为止您尝试了些什么。 –

+0

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

我建议你写一个适当的bash脚本,或者更好的办法是采用一种全功能的脚本语言。

这里有一个算法,将工作:

  1. 每个目录列表:
    1. 得到*.txt文件
    2. 打开每个文件
    3. 列表读取文件的每一行寻找一个匹配
      1. 在匹配的文件,增加一个双乐vel hash/dict/object/map/associative数组(或任何您选择的语言调用它们)由主机和目录键入。记录在列表中找到的主机名。
  2. 从主机名的列表中删除重复
  3. 排序主机名
  4. 使用主机名的名单,目录列表和主机数的哈希打印表的列表。

这是a link to Perl's built in functions organized by category。使用正则表达式,文件和目录的东西特别相关。