awk 条件过滤

要求将时间去掉,其他的输出不一定有规律,也不一定是总和为:组播为什么等,这是个面试题WedApr409:30:02CST2012总和为:133组播为:131点播为:1We... 要求将时间去掉,其他的输出不一定有规律,也不一定是总和为:组播为什么等,这是个面试题
Wed Apr 4 09:30:02 CST 2012
总和为: 133
组播为: 131
点播为: 1
Wed Apr 4 10:00:01 CST 2012
总和为: 136
组播为: 128
点播为: 5
Wed Apr 4 10:30:01 CST 2012
总和为: 130
组播为: 123
点播为: 4
Wed Apr 4 11:00:01 CST 2012
总和为: 126
组播为: 124
点播为: 2
Wed Apr 4 11:30:02 CST 2012
总和为: 127
组播为: 123
点播为: 1
Wed Apr 4 12:00:02 CST 2012
总和为: 133
组播为: 124
点播为: 3
Wed Apr 4 12:30:01 CST 2012
总和为: 131
组播为: 123
点播为: 4
Wed Apr 4 13:00:01 CST 2012
总和为: 127
组播为: 122
点播为: 3
展开
 我来答
笨鸟晚飞丨
推荐于2016-11-16 · TA获得超过753个赞
知道小有建树答主
回答量:224
采纳率:50%
帮助的人:63.1万
展开全部
grep -vE "[0-9]{1,2}(\:[0-9]{1,2}){2}" file

用正则把直接取时间固定格式 xx:xx:xx 时分秒 ,然后grep -E正则扩展,-v反匹配,这两个参数合起来用,就过滤到时间所在的行了,不能象他们那样过虑特定字符,万一字符变了呢?只有时间固定格式全球统一,绝不会变!
正则的含义:[0-9]的数字 {1,2}出现一到两次 (\:转译冒号[0-9]{1,2}即[0-9]的数字出现一到两次)然后小括号里的出现2次,这样就组合成了任意 小时,分钟和秒了。

给分吧~~

[yuechengjun@localhost ~]$ grep -vE "[0-9]{1,2}(\:[0-9]{1,2}){2}" aaa
具体的源文件如下:
总和为: 133
组播为: 131
点播为: 1
总和为: 136
组播为: 128
点播为: 5
总和为: 130
组播为: 123
点播为: 4
总和为: 126
组播为: 124
点播为: 2
总和为: 127
组播为: 123
点播为: 1
总和为: 133
组播为: 124
点播为: 3
总和为: 131
组播为: 123
点播为: 4
总和为: 127
组播为: 122
点播为: 3
小米飞猫
2012-06-26 · 专注于IT监控领域技术
小米飞猫
采纳数:1653 获赞数:4811

向TA提问 私信TA
展开全部
sed -i 's/^.*CST.*$//g' file #把时间删掉
awk '{sub(/.*CST.*/,"")};1' file #awk的

后边那句:
其他的输出不一定有规律,也不一定是总和为:组播为什么等

我没听懂说的什么意思。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ama2000
2012-06-26 · TA获得超过203个赞
知道答主
回答量:17
采纳率:0%
帮助的人:8.6万
展开全部
先确认一下你的问题: 仅仅去掉时间戳相关的行,保留其他所有的行,而且其他的行不一定都是很有规律的, 是这样吗???

如果是这样的话,可以参考这个思路:以CST作为分隔符

gawk -W re-interval -F"CST" ' !(NF==2 && $2~/[0-9]{4}/){print $0}'

-W re-interval : 表示开启区间元字符, 如 {4}
'!(express) {print $0}' : 不满足表达式的时候才输出
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式