免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1718 | 回复: 14
打印 上一主题 下一主题

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-07-30 13:34 |只看该作者 |倒序浏览
有一个文件,前K行不规则,可以视作文件头,后若干行很规则,分为M*N的阵列,列之间的分隔符是空格和TAB,M行是不确定的,N列是确定的,现在要取出N1,NI,NJ列,并且没行前面都必须用序号顺序的标志出来,大家想想。并且分格符换成|。


20030828 000955 133974477

020101                      民政局机关        和生            1771030663         3428304             01               490.00            490.00            230.00             35.00               .00               .00               .00               .00            378.00             31.00            108.00             30.00             15.00             20.00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00           1827.00            183.00             36.00             52.70           1555.30       
020101                      民政局机关  晓勇            177100040671         3451009561             01               440.00            490.00            230.00             40.00               .00               .00               .00               .00            378.00             31.00            108.00             30.00             15.00             20.00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00           1782.00            178.00             35.00             48.80           1520.20       
020101                      民政局机关        张丽            1771040705         34506376             01               310.00            399.00            230.00             38.00               .00               .00               .00               .00            354.00             33.00            108.00             30.00             15.00             20.00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00           1537.00            154.00             30.00             27.00           1326.00       
020101                      民政局机关        许敖            177040713         342563             01               315.00            408.00            230.00             35.00               .00               .00               .00               .00            366.00             31.00            108.00             30.00             15.00             20.00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00               .00           1558.00            156.00             31.00             29.00           1342.00

论坛徽章:
0
2 [报告]
发表于 2003-07-30 13:36 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

现在要做成:
1 | 177283749820347892304| 户名|金额
2 |  17798723鹅787-890-890-|湖面|惊愕
。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。
872|17792738490273849979|可色|湖北

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-07-30 13:41 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

有一个文件,前K行不规则,可以视作文件头,后若干行很规则

怎么定位文件头的末行或正文的首行?

论坛徽章:
0
4 [报告]
发表于 2003-07-30 13:41 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

用SHELL编成来解决,本人已经搞定了,只是希望能有更好的方法,大家都来想想哦,想对了,发颗糖吃。

论坛徽章:
0
5 [报告]
发表于 2003-07-30 13:57 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2003-07-30 15:06 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

awk -v i=0  'BEGIN{OFS="|"}{if(NR>k)i+=1 print i,$4,$3,$46}'>outfile infile

论坛徽章:
0
7 [报告]
发表于 2003-07-30 15:28 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

[quote]原帖由 "林子"]awk -v i=0  'BEGIN{OFS="|"}{if(NR>k)i+=1 print i,$4,$3,$46}'>outfile infile[/quote 发表:
     

稍稍修改一下,在我的linux上就能运行正常了:

  1. awk -v i=0 'BEGIN{OFS="|"}{if(NR>k) {i++; print i,$4,$3,$46}}' >oufile infile
复制代码

论坛徽章:
0
8 [报告]
发表于 2003-07-30 17:10 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

    首先表示感谢,而且先生连第46个域都给数了出来,不过我试了一下,大部分都是正确的,有几行的最后一个域没有数字,我把原始数据贴出来,请你们试一下看看。因为是实际的数据,不能长期保留,请见谅

20030828 000955 133974477

论坛徽章:
0
9 [报告]
发表于 2003-07-30 17:15 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

[quote]原帖由 "yoursmile"][/quote 发表:
     
哈哈哈,我明白了,这么做不行,因为这样的前提是必须每一行的所有字段不能为空,譬如身份证号码为空的行就不对了。而实际上保证每行每个字段不为空是不可能的。
不过还是十分感谢。

论坛徽章:
0
10 [报告]
发表于 2003-07-30 17:27 |只看该作者

吸吸,发表一个实际问题,大家想想办法,用SHELL编成解决

那是你的文本字段域不一致,有的45,有的46
如下:
awk -v i=0 'BEGIN{OFS="|"}{
if(NR>2){
if(NF==45){
i++; print i,$4,$3,$45}
if(NF==46){
i++; print i,$4,$3,$46}
}
}' >oufile infile
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP