|
hgx126
初级用户
 
积分 100
发帖 80
注册 2008-9-12
状态 离线
|
『楼 主』:
有条件删除行_用sed或gawk等
有一文本文件,数据量很大,其中部分数据如下:CODE: [Copy to clipboard]
公司部,500000,2009-6-12,2011-5-30,正常
公司部,2000000,2009-5-8,2011-5-7,次级
个贷保宁,80000,2008-4-20,2008-1-20,损失
公司部,5000000,2009-1-22,2012-1-21,正常
公司部,40000,2000-5-19,2002-5-20,可疑
个贷保宁,0,2006-1-20,2008-1-20,损失
个贷保宁,0,2008-1-21,2008-1-20,关注
个贷保宁,150000,2008-10-30,2010-10-28,次级
个贷保宁,28000,2009-9-7,2010-9-6,关注
公司部,3000000,2009-6-8,2011-5-7,正常 要求用sed或gawk等能快速处理文件的命令处理:
1、以逗号为分隔符,将数据中第二列为0的行删除;
2、以逗号为分隔符,将数据中第二列数据大于50000,且末列为“正常”的行删除。
求大家相助。
|
|
2010-9-8 20:34 |
|
|
HAT
版主
       
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
2 楼』:
找个gawk的基础教程看看吧
|

 |
|
2010-9-8 21:36 |
|
|
hexiaolin
新手上路

积分 2
发帖 2
注册 2009-3-1
状态 离线
|
『第
3 楼』:
在windows中用gawkCODE: [Copy to clipboard]
gawk -F, "{if($2==0||($2>50000&&$NF~/正常$/)) $0=\"\";print}" file 有个“缺点”:要删除的行会变成空行
|
|
2010-9-8 22:31 |
|
|
HAT
版主
       
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
4 楼』:
Re 3 楼
可以看看教程中关于next的用法
|

 |
|
2010-9-9 09:53 |
|
|
hgx126
初级用户
 
积分 100
发帖 80
注册 2008-9-12
状态 离线
|
『第
5 楼』:
版主,在哪儿可以下载更多的关于gawk的教程?我在网上找到的教程都是些粗略的说明,没有详细深入的介绍。麻烦你指点迷津。
|
|
2010-9-9 10:43 |
|
|
HAT
版主
       
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
|
2010-9-9 14:37 |
|
|
hgx126
初级用户
 
积分 100
发帖 80
注册 2008-9-12
状态 离线
|
『第
7 楼』:
这个应该可以:CODE: [Copy to clipboard]
gawk -F, "{if($2==0||($2>50000&&$NF~/正常$/)) next;print}" file
|
|
2010-9-14 00:33 |
|
|
DXSX
中级用户
  
积分 247
发帖 147
注册 2009-4-9
状态 离线
|
『第
8 楼』:
cmd 批处理 for+if 搞定CODE: [Copy to clipboard]
@echo off
for /f "delims=, tokens=1,2,3,4,5" %%c in (xyz.txt) do (
if not %%d GTR 500000 (if not "%%g"=="正常" echo %%c,%%d,%%e,%%f,%%g )
) [ Last edited by DXSX on 2010-9-14 at 11:40 ]
|
|
2010-9-14 11:38 |
|
|
hgx126
初级用户
 
积分 100
发帖 80
注册 2008-9-12
状态 离线
|
『第
9 楼』:
HAT版主,能否指点一下以下四个批处理的区别:CODE: [Copy to clipboard]
gawk -F, "{($NF==\"正常\");print}" file
gawk -F, "{($NF==/正常/);print}" file
gawk -F, "($NF==\"正常\"){print}" file
gawk -F, "($NF==/正常/){print}" file P处理中:
一、第一个与第二个结果相同,说明/正常/与\"正常\"可能相同,为什么第四个没有输出结果?修改为 $NF~/正常/ 才正确?/正常/与\"正常\"是否真的相同?
二、第一、二个P处理中,$NF==\"正常\"是否是表示最末一项等于“正常”,为什么输出结果又不是?
三、"~"与"=="区别在哪里?有时候两个结果相同,有时间结果又不同?
四、以下两个批处理:CODE: [Copy to clipboard]
gawk -F, "$2=="0"{print}" file
gawk -F, "{if($2=="0") print}" file 结果为什么是相同的?而上述第一、二个P处理与第三个又结果却不相同?
问题有点多,麻烦了!
谢谢了。
[ Last edited by hgx126 on 2010-9-14 at 20:56 ]
|
|
2010-9-14 20:39 |
|
|
HAT
版主
       
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
10 楼』:
Re 9 楼
/正常/一般是进行正则匹配的时候才这样写;\"正常\"是Windows里面的特殊写法,\是为了转义后面的",在UNIX里面不需要这么麻烦。
~用于正则匹配,==用比较是否相等。
|

 |
|
2010-9-14 21:43 |
|
|