LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1151|回复: 7

一个文本处理的问题【使用awk】【已解决】

[复制链接]
发表于 2009-7-28 19:09:38 | 显示全部楼层 |阅读模式
有这样一个文本:
1xxx
2xxx
3xxx
2xxx
3xxx
1xxx
2xxx
3xxx
......
每三行打头的都应该是1,2,3, 所有不符合规律的应该被删掉,所以第4和第5行应该被删除, 最终结果应该是
1xxx
2xxx
3xxx
1xxx
2xxx
3xxx
...
以此类推

请问用awk如何实现呢?比较急,多谢了!
 楼主| 发表于 2009-7-29 10:53:33 | 显示全部楼层
各位牛人,没有办法实现吗?如果不用awk呢?跪谢了
回复 支持 反对

使用道具 举报

发表于 2009-7-29 11:35:25 | 显示全部楼层
awk 'BEGIN { count = 1 } { line = substr($0, 1, 1); ind = count % 3 ? count % 3 : 3; if(ind == line) {print $0; count++}}' datafile
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-29 11:44:17 | 显示全部楼层
太感谢了,试试先
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-29 12:01:40 | 显示全部楼层
Post by ziyang;2010581
awk 'BEGIN { count = 1 } { line = substr($0, 1, 1); ind = count % 3 ? count % 3 : 3; if(ind == line) {print $0; count++}}' datafile
如果是字符串呢?如:
axxx
bxxx
cxxx
bxxx
cxxx
axxx
bxxx
cxxx
回复 支持 反对

使用道具 举报

发表于 2009-7-29 16:27:41 | 显示全部楼层
awk 'BEGIN { count = 0; map[0] = "a"; map[1] = "b"; map[2]="c" } map[count % 3] == substr($0, 1, 1) { print $0; count++;}' datafile
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-7-29 17:29:05 | 显示全部楼层
试过了,太感谢了!
回复 支持 反对

使用道具 举报

发表于 2009-8-7 13:34:27 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表