免费注册 查看新帖 |

Chinaunix

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

拆分文件问题~~ 急!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-09-01 09:34 |只看该作者 |倒序浏览
我有一个文件  想用一些条件给拆分成N多个~~
想匹配第一个字段 然后符合的拆分成一个文件

写法:
while read -r jg
do
cat $filename |awk -F "|" '{if ($1=='$jg') print $0}' > $filename.$jg
done < jgdm.txt

可是这样子效率好慢
如果jgdm.txt 有多条记录 就要读多次filename文件
有没有好办法能一次就拆分出来的??

论坛徽章:
0
2 [报告]
发表于 2006-09-01 09:40 |只看该作者
我哭~~~
怎么没人理我呀~

论坛徽章:
0
3 [报告]
发表于 2006-09-01 09:45 |只看该作者
亲爱的斑斑  到底在不在呀~~  帮偶看看吧 555555 !!  可怜呀 都没人理!!

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2006-09-01 09:52 |只看该作者
如果分成的文件不是很多
awk 'NR==FNR{a[$0]=$0}
NR>FNR{print >"jgdm."a[$1]}' jg jgdm.txt

看新手导航吧

论坛徽章:
0
5 [报告]
发表于 2006-09-01 10:20 |只看该作者
原帖由 waker 于 2006-9-1 09:52 发表
如果分成的文件不是很多
awk 'NR==FNR{a[$0]=$0}
NR>FNR{print >"jgdm."a[$1]}' jg jgdm.txt

看新手导航吧


新手导航好多哦    看的眼花~  

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-09-01 10:45 |只看该作者
split/csplit

论坛徽章:
0
7 [报告]
发表于 2006-09-01 14:42 |只看该作者
烈火能详细点吗? 偶是菜菜~  嘿嘿
就是我的文件大概有几十万的记录,字段之间用'|'分割的
想根据第一个字段进行拆分
能具体写下怎么用上面那个命令不?
我的是ksh环境  HP-UNIX的机器

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
8 [报告]
发表于 2006-09-01 15:11 |只看该作者
原帖由 霏飞 于 2006-9-1 14:42 发表
烈火能详细点吗? 偶是菜菜~  嘿嘿
就是我的文件大概有几十万的记录,字段之间用'|'分割的
想根据第一个字段进行拆分
能具体写下怎么用上面那个命令不?
我的是ksh环境  HP-UNIX的机器

我没你的环境,或许帮不了你~,要不你贴出样本,和想要的效果,让大家给你出出主意吧!

论坛徽章:
0
9 [报告]
发表于 2006-09-01 15:15 |只看该作者

一个解决方法

==测试文件:txt==
: cat txt
file1   123
file2   abc
file2   dfg
file1   987
file2   xyz
file1   456

==拆分条件文件:filecond==
: cat filecond
file1
file2

拆分原则:按第一个字段,将数据归类。例如:file1, 归于file1.txt;file2,归于file2.txt

=========脚本================
: cat filecond
file1
file2
gzhang@xianlinux9.asia.corp.platform.com-40: cat sortFile.awk
BEGIN {
  "cat filecond|wc -l" | getline cndNum;
  for (i = 0; i < cndNum; i++)
    {
      getline < "filecond";
      a=$0;
    }
}
{
  for (i=0; i<cndNum; i++)
     if ($1== a)
     cmdLine=sprintf("echo %s >> %s.txt",$0,a);
     #system(cmdLine);
     print cmdLine;
  }

=====测试结果=====

: awk -f sortFile.awk txt

: more file?.txt
::::::::::::::
file1.txt
::::::::::::::

file1 123
file1 987
file1 456
::::::::::::::
file2.txt
::::::::::::::

file2 abc
file2 dfg
file2 xyz

[ 本帖最后由 vic2005 于 2006-9-1 15:30 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP