Linux上大文件切割以及批量并发处理
一、环境说明
某次项目需求中,在Linux上有批文本文件,文件文件都有几个G大,几千万行的数据。无论在Linux和Windows打开这么大的文件,基本上打开要卡半天,更别说编辑。
因此想到使用split命令对大文件进行切割,再分隔取其中的字段,最后导出文件(保留有用的字段)。
二、split常用命令参数
-a、 --后缀长度=N生成长度为N的后缀(默认值2)
--附加后缀=后缀向文件名附加附加后缀
-b、 --bytes=大小每个输出文件放置大小字节
-C、 --line bytes=每个输出文件的最大行大小字节
-d、 --数字后缀[=FROM]使用数字后缀代替字母;从更改开始值(默认值为0)
-l、 --行数=每个输出文件的行数
三、命令参考示例
##每200万行进行切割,使用数字后缀,后缀的长度为3,即最大999
split -l 2000000 aaaa.txt -d -a 3
四、脚本参考
直接写了个脚本,要用时直接跑下就完成了。这里限制后台并发处理的作用是为了防止文件后台处理时,并发数过多,导致机器卡住(数据量大的情况下还是限制并发数比较好)。
这里其实还可以在加个循环,或者位置变量等,从而批量处理一批大文件,就不用手动执行一个个文件了。shell脚本编写每个人都不同,脚本只进行参考,只提供个简单的思路。
##指定需要并发的线程数,根据机器的性能进行修改,不然过多并发数会影响机器性能
thread=20
tmp_fifofile=/tmp/$$.fifo
work=./work
if [ -d $work ];then
cd $work
else
mkdir $work
cd $work
fi
##对原文件进行切割,生成临时文件,文件名为“x001”,“x002”....
split -l 5000000 aaaa.txt -d -a 3 mkfifo $tmp_fifofile
exec 7<> $tmp_fifofile
rm -f $tmp_fifofile for t in `seq $thread`
do
echo >&7
done ##对原文件内容进行截取,再导出为新文件,名为bbbb.txt。原文件是按,进行分隔,根据实际情况修改。
for i in `ls x*`
do
read -u 7
{
cat $i | awk -F, '{print $1","$2","$3","$4","$5}' >> bbbb.txt
echo $i >> dns_data.log
echo >&7
}&
done
exec 7>&-
##最后删除前面分隔的临时文件
find ./ -type f -name "x*"|xargs rm -f
Linux上大文件切割以及批量并发处理的更多相关文章
- linux上大文件切割成小文件传输
使用tar命令进行压缩,使用split进行切割 压缩并分割: tar -zcvf - admin- |split -b 100m -d admin-.tar.gz 解压: 先合并成tar包在解压 ca ...
- Ajax+Java实现大文件切割上传
技术体系:html5(formdata) + java + servlet3.0+maven + tomcat7 <!DOCTYPE html> <html> <head ...
- 实战|Linux大文件切割
一个执着于技术的公众号 日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim.cat.grep.awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在: 执行速度缓慢,文件 ...
- linux传输大文件
http://dreamway.blog.51cto.com/1281816/1151886 linux传输大文件
- Linux上读取文件
Linux上读取文件的方法: #!/bin/bash # This is a script for test exec CONFIG_FILE=$ #该脚本传一个文件名为参数 FILE_NO= ech ...
- 大文件切割(split)
split提供两种方式对文件进行切割: 根据行数切割,通过-l参数指定需要切割的行数 根据大小切割,通过-b参数指定需要切割的大小 1.1 根据行数切割 如下以一个3.4G大小的日志文件做切割演示,每 ...
- linux上hosts文件如何配置
linux上hosts文件如何配置 一.什么是host Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登 ...
- windows上用putty从linux上下载文件
我之前使用putty都是直接从网上下的putty.exe,其实如果想下载windows的mis二进制文件,系统安装的话会包含,pscp.psftp.puttygen等一系列的文件. 今天下从服务器上, ...
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
随机推荐
- 【Java常用类】Calendar
Calendar日历类 实例化 方法一 创建其子类**(GregorianCalendar)**的对象 方法二 调用其静态方法getInstance() Calendar instance = Cal ...
- MySQL之MVCC与幻读
转自 https://blog.csdn.net/qq_31930499/article/details/110393988 如果是快照度,直接采用MVCC,如果是当前读,才会走next-key lo ...
- JSF/SpringMVC/Struts2区别与比较
转自SpringMVC与Struts2区别与比较总结 1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文, ...
- 树形dp空间优化(dfn)
树形dp空间优化 介绍 有时题目会告诉我们n叉树的最大层数,或者给出一个完全n叉树树,直接做树形dp会爆空间时,就可以用这个优化方法. 多数树形dp都是先dfs到子树,再合并到根上,显然当合并到根上时 ...
- FilterChain过滤器链(Servlet)
在 Web 应用中,可以部署多个 Filter,若这些 Filter 都拦截同一目标资源,则它们就组成了一个 Filter 链(也称过滤器链).过滤器链中的每个过滤器负责特定的操作和任务,客户端的请求 ...
- gorm中的删除
删除 删除一条记录 删除一条记录时,删除对象需要指定主键,否则会触发 批量 Delete,例如: db.Debug().Where("id = ?", 6).Delete(new( ...
- 从服务端生成Excel电子表格(Node.js+SpreadJS)
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,通常用于创建网络应用程序.它可以同时处理多个连接,并且不像其他大多数模型那样依赖线程. 对于 Web 开发者来说,从数据库 ...
- Flutter 多引擎支持 PlatformView 以及线程合并解决方案
作者:字节移动技术-李皓骅 摘要 本文介绍了 Flutter 多引擎下,使用 PlatformView 场景时不能绕开的一个线程合并问题,以及它最终的解决方案.最终 Pull Request 已经 m ...
- 同态加密与 Paillier/RSA
本文作者: wdxtub 本文链接: http://wdxtub.com/flt/flt-03/2020/12/02/ 白话同态加密 虽然同态加密即使现在听起来也很陌生,但是其实这个概念来自 1978 ...
- python小兵 面向对象继承super和c3算法
python多继承 在前面的学习过程中. 我们已经知道了Python中类与类之间可以有继承关系. 当出现了x是一种y的的时候. 就可以使⽤继承关系. 即"is-a" 关系. 在继承 ...