Chinaunix首页 | 论坛 | 博客
  • 博客访问: 180801
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 552
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-14 14:02
文章分类
文章存档

2015年(1)

2014年(24)

2013年(8)

我的朋友

分类: LINUX

2014-06-04 13:36:57

linux下文件分割可以通过split命令来实现,可以指定按行数分割和安大小分割两种模式。Linux下文件合并可以通过cat命令来实现,非常简单。

  在Linux下用split进行文件分割:

  模式一:指定分割后文件行数

  对与txt文本文件,可以通过指定分割后文件的行数来进行文件分割。

  命令:split -l 300 large_file.txt new_file_prefix

  模式二:指定分割后文件大小

 split -b 10m server.log waynelog

对二进制文件我们同样也可以按文件大小来分隔。

 

在Linux下用cat进行文件合并:

  命令:cat small_files* > large_file

 

 

 

tag: linux 日志 分割

明:

本文采用一个50M大小的日志文件进行测试。
日志文件名:log.txt.gz。
文件行数:208363

方法1:(split分割)
语法:split [-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
gunzip log.txt.gz            //一定要先解压,否则分割的文件是不能cat/zcat显示;

wc -l log.txt                //计算一个文件的总行数;

208363 log.txt
split -l 120000 log.txt newlog  //通过指定行数,将日志分割成两个文件
du -sh *50M    log.txt
29M    newlogaa
22M    newlogab
# file *                        //分割后的文件与原文件属性一样
log.txt: ASCII text, with very long lines, with CRLF line terminators
newlogaa: ASCII text, with very long lines, with CRLF line terminators
newlogab: ASCII text, with very long lines, with CRLF line terminators
# gzip newlogaa newlogab        //将分割后的文件进行压缩,以便传输

另一种方法,通过

方法2:(dd分割)
# gunzip log.txt.gz            //一定要先解压,否则分割的文件是不能cat/zcat显示;

#dd bs=20480 count=1500 if=log.txt of=newlogaa     //按大小分第一个文件

#dd bs=20480 count=1500 if=log.txt of=newlogab skip=1500  //将大小之后的生成另一个文件#file *

log.txt: ASCII text, with very long lines, with CRLF line terminators
newlogaa: ASCII text, with very long lines, with CRLF line terminators
newlogab: ASCII text, with very long lines, with CRLF line terminators
分割没问题,但会出现同一行分到不同文件的情况,除非你以及日志分析系统可以“容忍”。
方法3:(head+tail 分割)
#gzip log.txt.gz               //如不解压缩,下面请用zcat。
#wc -l log.txt    
           //统计一个行数
208363 log.txt
# head -n `echo $((208363/2+1))` log.txt > newloga.txt     //前x行重定向输出到一个文件中;

#tail –n `echo $((208363-208362/2-1))` log.txt >newlogb.txt//后x行重定向输出到一个文件中;

#gzip newloga.txt newlogb.txt          //将两个文件进行压缩


方法4:(awk分割)
#gzip log.txt.gz#awk ‘{if (NR<120000) print $0}’ log.txt >newloga.txt#awk ‘{if (NR>=120000) print $0}’ log.txt >newlogb.txt
以上两个命令,都要遍历整个文件,所以考虑到效率,应使用合并成:

#awk ‘{if (NR<120000) print $0 >”newloga.txt”;if (NR>=120000) print $0>”newlogb.txt”}’ log.txt

总结:
以上四种方法,除了dd之外的三种方式都可以很好的整行分割日志文件。进行分割时,应考虑在读一次文件的同时完成,如不然,按下面的方式分割:
Cat log.txt| head –12000 >newloga.txt
Cat log.txt | tail –23000 >newlogb.txt
如用此方法分割文件的后一部分,那么执行第二行命令文件时,前x行是白白读一遍的,执行的效率将很差,如文件过大,还可能出现内存不够的情况。
                                                                          
阅读(2150) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~