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
*50Mlog.txt
29Mnewlogaa
22Mnewlogab
# 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行是白白读一遍的,执行的效率将很差,如文件过大,还可能出现内存不够的情况。