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 展开
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 展开
3个回答
展开全部
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
用正则把直接取时间固定格式 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
展开全部
sed -i 's/^.*CST.*$//g' file #把时间删掉
awk '{sub(/.*CST.*/,"")};1' file #awk的
后边那句:
其他的输出不一定有规律,也不一定是总和为:组播为什么等
我没听懂说的什么意思。
awk '{sub(/.*CST.*/,"")};1' file #awk的
后边那句:
其他的输出不一定有规律,也不一定是总和为:组播为什么等
我没听懂说的什么意思。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先确认一下你的问题: 仅仅去掉时间戳相关的行,保留其他所有的行,而且其他的行不一定都是很有规律的, 是这样吗???
如果是这样的话,可以参考这个思路:以CST作为分隔符
gawk -W re-interval -F"CST" ' !(NF==2 && $2~/[0-9]{4}/){print $0}'
-W re-interval : 表示开启区间元字符, 如 {4}
'!(express) {print $0}' : 不满足表达式的时候才输出
如果是这样的话,可以参考这个思路:以CST作为分隔符
gawk -W re-interval -F"CST" ' !(NF==2 && $2~/[0-9]{4}/){print $0}'
-W re-interval : 表示开启区间元字符, 如 {4}
'!(express) {print $0}' : 不满足表达式的时候才输出
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询