【发布时间】:2016-08-25 07:03:02
【问题描述】:
我的项目是从日志文件中提取特定数据。
数据有列和行;有些是文本字符串,有些是数字。
为了只提取我感兴趣的信息行,我尝试了一个 awk 命令,该命令曾经可以工作(很久以前),看起来像这样:
awk '{if($1 == text1Exp || textExp2 || textExp3) {print $1, $2}}' file.log
嗯,效果不太好。搜索给了我以下运行良好的语法:
awk '/Counter/ || /IfInErrors/ || /IfOutErrors/ {print $0}'
我制作了一个运行良好的简短脚本:
for i in `ls`; do awk '/Counter/ || /IfInErrors/ || /IfOutErrors/ {print $0}' $i > $i.csv; done
我只用我想要的数据处理了 200 多个文件。现在我需要将数据作为 csv 文件导入,其中制表符和空格都设置为一个长度。我使用以下方法迭代地完成了这项工作:
sed -i 's/ */ /g' *.csv # all tab white space and white space set
接着是:
sed -i "s/ /,/g" *.csv # substitute spaces with a comma.
还有一些其他替换可以清理数据的格式。现在我的数据看起来很干净:
,Counter Name,port 1/1/x33,port 1/1/x34,port 1/1/x35,port 1/1/x36
,IfInErrors:,0,0,0,0
,IfOutErrors:,0,0,0,0
,Counter Name,port 1/1/x37,port 1/1/x38,port 1/1/x39,port 1/1/x40
,IfInErrors:,**95**,0,0,0
,IfOutErrors:,0,0,0,0
(我知道前导逗号但很懒惰;我将在 0.2a 版中修复它)。
我要完成以下工作:
- 计算 IfInErrors && IfOutErrors 的零值的数量
- 计算 IfInErrors && IfOutErrors 的非零值的数量
- 忽略带有 Counter ... 的行
- 报告 IfInErrors && IfOutErrors 的非零值的总和并在文件中捕获
- 报告零值的总和并将总和捕获到在需求 4 中创建的同一文件中。
不幸的是蚱蜢,这超出了你的剧本,大师说。 :(
我尝试在 Exell 中处理数据,但是,你知道...
我尝试了一些在线课程,但尽管它们有所帮助,但我发现通过实践、努力和与导师合作,我学得最好。我试图找到帮助大卫卡拉丹的盲人肖林僧侣,但他退休了,用棍子打我......
有什么建议吗?
【问题讨论】:
-
问题显然是你拼错了 Shaolin ;-)。编辑您的问题以包含一些简洁、可测试的示例输入和预期输出,您可能会得到一些帮助。
标签: regex bash logging awk sed