Bash脚本在每个字符串出现时拆分日志文件,并在指定行

时间:2016-10-12 19:37:12

标签: string bash shell parsing

我有一个日志文件,准确地说它是一个类似于日志文件的自定义应用程序报告。我想创建一个bash脚本来管理这个日志,并在这个脚本启动时从这个单个文件生成“n”个文件。 目标是在“字符串”出现时“分割”此日志文件,并在此字符串后面捕获该单词,并忽略该行中的所有其余内容,以将此单词用作文件名的一部分。

我看到一些基本脚本将每个单词或字符串出现的日志文件分开,但它没有任何机会在其他方法中保存或操作“内容”,它只是一个“分割器”并保存文件名1.txt ,2.txt等。

为了有一个上下文,我们讨论的是生成一个“计算”软件许可证的报告,该报告如下:

blabla - Copyright (c) 1989-2016 Some Cool software without decent report. All Rights Reserved.
Cool Software License status on Wed 10/12/2016 03:02

License server status: port@serverhostname
    License file(s) on serverhostname: C:\Path\To\File\lic.txt:

  serverhostname: license server v0.7b

Users of service1:  (Total of 182 licenses issued;  Total of 0 licenses in use)

Users of service2:  (Total of 182 licenses issued;  Total of 180 licenses in use)

  "service2" v61.8, vendor: VENDORNAME
  floating license

    USER123 PC1234 PC1234 (v61.7) (SERVER/2501 4605), start Wed 10/12 14:56, 10 licenses
    USER311 PC3331 PC3331 (v61.2) (SERVER/2501 10621), start Mon 10/10 17:55, 12 licenses

Users of service3:  (Total of 182 licenses issued;  Total of 0 licenses in use)

Users of another_services:  (Total of 182 licenses issued;  Total of 0 licenses in use)

  "another_services" v61.8, vendor: ABAQUSLM
  floating license

    USER0021 PCNAME1 PCNAME1 (v61.4) (SERVER/2501 6852), start Wed 10/12 14:44
    USER0034 PCNAME03 PCNAME03 (v61.1) (SERVER/2501 13016), start Wed 10/12 10:51
    USER0123 PCNAME5 PCNAME4 (v61.4) (SERVER/2501 6852), start Wed 10/12 14:44

Users of plugin01:  (Total of 30 licenses issued;  Total of 0 licenses in use)

我想要做的是为每个服务/插件创建一个单独的文本文件,因此我需要“拆分”,搜索/识别字符串,或者更好的行开头:

  

的用户

后跟service_name,我需要将其存储在一个变量中以用作文件名的一部分。

在文本文件中,我只想报告包含USER和PC信息的字符串,跳过两条描述行重复的服务名称,以及其他一些有关服务的信息。

该文件是动态报告,因此在执行脚本,数字或服务或“Users of”行下的用户数之前,我真的不知道。此外,某些服务不能包含任何行。如果某个服务没有任何行,那么可以生成没有任何行的文本文件。

任何建议都非常受欢迎,因为我是shell脚本的新手。

干杯!

1 个答案:

答案 0 :(得分:0)

尝试使用awk:

% awk '/^Users of/{name=$3} name{print > name}' file
% ls -1 *service*

并非所有要求都已完成,但随时可以改进,我已经做了更大的部分