linux下shell脚本切割大文件为多个小txt文件

解决方法:

1. 先使用split命令切割大文件,每个小文件保存100万行

split 参数:

-b  :后面可接欲分割成的档案大小,可加单位,例如 b, k, m 等;
-l  :以行数来进行分割;

#按每个文件1000行来分割除

split -l 1000 httperr8007.log httperr
 
httpaa,httpab,httpac ........
 
#按照每个文件100K来分割

split -b 100k httperr8007.log http
 
httpaa,httpab,httpac ........

2. 遍历所有100万行文件,逐个新建目录再切割成1万行小文件

#!/bin/bash
 
bigfile="1.txt"
split -l 1000000 $bigfile text
 
currdir=1
for smallfile in `ls | grep "text*"`
do
    linenum=`wc -l $smallfile | awk '{print $1}'`  
    n1=1  
    file=1
 
    savedir="$smallfile$currdir"
    if [ ! -d "$savedir" ]
    then
        mkdir $savedir
    fi
 
    while [ $n1 -lt $linenum ]  
    do 
        n2=`expr $n1 + 9999`  
        sed -n "${n1},${n2}p" $smallfile > $savedir/text$file.txt
        n1=`expr $n2 + 1`  
        file=`expr $file + 1`  
    done
 
    currdir=`expr $currdir + 1`
done

时间: 2024-10-23 19:58:45

linux下shell脚本切割大文件为多个小txt文件的相关文章

linux 下shell脚本调用 (小白求教)

问题描述 linux 下shell脚本调用 (小白求教) Shell脚本怎么实现调用一个可执行文件并在脚本中执行该文件中的命令? (可执行文件打开后是命令行模式) 解决方案 啥意思?脚本里调用脚本?直接以廖本名调用啊 解决方案二: 这个是不是类似,在shell命令行窗口中打开另外一个命令行? 解决方案三: 用fork,system等,可以获取它的管道输出等 解决方案四: 文件中的命令? 没明白什么意思? 解决方案五: 可以尝试使用source函数................. 解决方案六:

Linux下Shell脚本中几种基本命令的替换区别_linux shell

Part 1 : ` command ` 这是 "命令标准输出作为函数标准输入" 操作方法之一,有很大的弊端以及不安全的地方. 缺点一:比较陈旧. 缺点二:容易与单引号混淆.(其实它是你键盘"!"左边那个键) Part 1.5 ` command``与 $(command) 俩者区别 直接看几张图吧,看这图解释他们区别... 大家可以看到俩种表达方式,分别是代表命令直接执行和嵌套执行. 我们发现:执行`` 和 $() 是相同的. 附,其实这里有个小bug...( 橙

linux下Shell脚本分析Nginx日志抗小量ddos攻击

网站被ddos攻击,遂写了个脚本来抵抗一下,实现方式: 1. 攻击特征,不同ip不断POST网站首页,造成资源消耗过度 2. 分析nginx访问日志,判断POST特征取得客户端访问ip 3. 将连接数大于50的攻击ip封杀 4. 记录攻击ip到文档 5. 每次取得的攻击ip与已有攻击ip比较 查看源代码: #!/bin/bash   WEBSITES=(  example.com )   minute_now=`date +%M` max_connections=50 banips="/wwwd

Linux下Shell脚本完成SVN版本库的建立

每次建立一个新的SVN版本库总感觉很繁琐,所以写了段脚本来把这个过程自动化,详细代码如下:  代码如下 复制代码 #!/bin/bash # by www.111cn.net echo -n "Enter SVN name :" read svn_name /usr/bin/svnadmin create /svnroot/$svn_name if [ $? -eq 0 ]; then         # svnserve.conf     sed -i 's/# anon-acces

Shell脚本切割tomcat的日志文件_linux shell

鉴于在调试logback和log4j的文件切割一直无法成功,随性用shell写个脚本用来切割tomcat下的日志文件(大家如果有在logback或log4j使用文件切割成功的话,可以留下使用方式,先谢谢了) 1:废话少说,直接贴上脚本: #!/bin/sh log_dir=/var/log/tomcat monitor_file=$1 #tomcat目录下的catalina.out文件的绝对路径 file_size=`du $monitor_file | awk '{print $1}'` if

Linux/Unix shell 脚本跨服务器跨实例执行SQL

      在DB运维的过程中,难免碰到需要跨多个服务器以及多个Oracle实例查询数据库的情形.比如我们需要查看当前所有生产环境数据库上open_cursor参数的值以便考虑是否需要增加.而需要查看的数据库服务器上有多个实例,同时又存在多个数据库服务器,这样子下来,几十个DB,上百个的情形一个个查,那得把人给累死.那就像点办法撒,写个shell脚本,轮巡所有服务器及服务器上的所有实例.见本文的描述.      关于shell脚本中如何调用SQL,可以参考下列链接:           Linu

Linux通过shell脚本创建SVN版本库简化创建过程

  Linux每次建立SVN版本库的过程都非常麻烦,如果将这些通过shell脚本来实现的话会简单很多,那么这个shell脚本要如何编译呢?下面小编就给大家介绍下Linux利用shell脚本创建SVN版本库的方法. 每次建立一个新的SVN版本库总感觉很繁琐,所以写了段脚本来把这个过程自动化,详细代码如下: #!/bin/bash # by www.111cn.net echo -n "Enter SVN name :" read svn_name /usr/bin/svnadmin cr

linux的shell脚本怎么将一块内容的输出全部重定向?

问题描述 linux的shell脚本怎么将一块内容的输出全部重定向? 我知道重定向一条命令可以用>> file 2>&1 来重定向到某文件 如果我想重定向shell脚本的一块内容怎么重定向呢,一定要把每条命令都用>>吗? 解决方案 用exec命令绑定重定向,具体来说就是: 在那块shell脚本前面加条exec命令,改变标准输出 在那块shell脚本后面也加条exec命令,恢复标准输出 解决方案二: mysql -u $USER -p$PASS << EOF

Linux系统shell脚本编程――生产实战案例

Linux系统shell脚本编程――生产实战案例 在日常的生产环境中,可能会遇到需要批量检查内网目前在线的主机IP地址有哪些,还可能需要检查这些在线的主机哪些端口是开放状态,因此依靠手工来检查是可以实现,但比较费时费力,所以需要结合shell脚本来实现批量检查的功能,那么今天就来做个小小的实验. 1.开发脚本前准备 一般大家都知道,测试主机是否在线,常用的命令无非就是ping.nmap,因此,首先找一个地址来测试下ping命令的效果 [root@centos6 scripts]# ping 17