免费注册 查看新帖 |

Chinaunix

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

如何删除首行和分裂文本文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-28 21:14 |显示全部楼层 |倒序浏览
一个目录内有csv(实则为分号分隔并非逗号分隔)为扩展名的文件15个,其中14个文件使用perl删除首行后生成同名的txt文件,剩余一个Cell.csv文件不仅要删除首行,还需将其分裂为两个文件Cell.txt和Cell2.txt,其中Cell.txt文件包含Cell.csv文件的前255列,Cell2.txt包含原Cell.csv文件的前两列和第256列至328列!

原来是在awk下做的,现在转到perl下,有些不熟悉,请赐教!

论坛徽章:
0
2 [报告]
发表于 2009-11-28 21:23 |显示全部楼层
内部内容和分隔符不得改变!
先谢了:联系QQ:110290428

论坛徽章:
0
3 [报告]
发表于 2009-11-28 23:14 |显示全部楼层
谢谢,搜索学习中!
不过英文居多,啃起来有些吃力!

论坛徽章:
0
4 [报告]
发表于 2009-11-28 23:19 |显示全部楼层
没关系,继续努力探索中
多谢指点

论坛徽章:
0
5 [报告]
发表于 2009-11-28 23:48 |显示全部楼层
多谢,目前基本解决了第一个问题,就是去除首行!
假如Adjacency.csv文件,要去除首行,在Windows下的单行指令如下:
perl -i.old -ne "print unless 1 .. 1" Adjacency.csv

但希望将Adjacency.csv通过脚本删除首行后生成新文件Adjacency.txt
请予指教,另外分裂还没有眉目!

论坛徽章:
0
6 [报告]
发表于 2009-11-29 00:01 |显示全部楼层
改名搞定:
perl -ne "print unless 1 .. 1" <Adjacency.csv>; Adjacency.txt

论坛徽章:
0
7 [报告]
发表于 2009-11-29 00:29 |显示全部楼层
原帖由 hulnglei 于 2009-11-28 23:49 发表
一定要用perl吗?    如果只有15个文件的话直接用awk,head 等其他命令很简单吧!
head -n 255 input.csv > output.csv


您可能理解有误,不是提取文件的前255行,而是文件中以分号分隔的前255列,因为Access一张表中只能最大处理255个字段,所以要将那个文件分裂成两部分,前255裂作为一个文件,后面得列和最前面的两列作为一个文件!

论坛徽章:
0
8 [报告]
发表于 2009-11-29 09:48 |显示全部楼层
原帖由 hulnglei 于 2009-11-28 23:49 发表
一定要用perl吗?    如果只有15个文件的话直接用awk,head 等其他命令很简单吧!
head -n 255 input.csv > output.csv


尝试使用windows下的gawk来进行删除首行处理,语句如下:
gawk.exe -F";" "BEGIN {OFS=";"} NR>1 {print}" Adjacency.csv >Adjacency.txt
设置简化为:
gawk.exe -F";" "NR>1{print}" Adjacency1.csv > Adjacency.txt

但是执行结果为空,命令行提示如下:
E:\>gawk.exe   -F";" "NR>1{print}" Adjacency.csv  1>Adjacency.txt

GAWK: fatal error: cannot open file Adjacency.csv for reading (No such file or directory)

显示找不到Adjacency.csv这个文件,且输出符>前多了一个1.
请问何错,请指教!

[ 本帖最后由 metaxing 于 2009-11-29 10:09 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-11-29 14:33 |显示全部楼层
嗯,努力研究中,现在就剩下分裂问题了!

论坛徽章:
0
10 [报告]
发表于 2009-11-29 15:08 |显示全部楼层
有些眉目了,获得巨大进展!
先将Cell.csv删除首行后生成Cell.txt文件
perl -ne "print unless 1 .. 1" <Cell.csv>; Cell.txt

然后分裂Cell.txt为Cell1.txt和Cell2.txt
perl -F; -lane "print \"@F[0..200]\"" <Cell.txt>; Cell1.txt
perl -F; -lane "print \"@F[0..1,201..328]\"" <Cell.txt>; Cell2.txt

但是分裂代码中将Cell1.txt和Cell2.txt文件的分隔符改为了空格,请问如何避免后两行代码改变分隔符!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP