使用shell脚本实现文本拆分

需求说明

在bash中,我们可以使用split命令轻松实现文本的拆分。现在增加两点需求:

1. 在每份拆分文件的头部插入title,便于查看。

2. 拆分文件的名称为源文件名称前加编号,如1.source.txt。

总体思路

1. 执行split命令,把源文件按指定行数拆分成若干小文件。

2. 遍历这些小文件,并创建名称符合要求的拆分文件,然后插入title并拷贝文件内容。

具体步骤

1. 首先执行如下命令,人工造出一个包含9999行的大文件source.txt。

echo "" | awk ‘BEGIN{for (i = 0; i < 9999; i++) print(201503200001+i)".jpg"}‘ > source.txt

2. 假设指定行数为3000,执行如下命令,这个文件将被拆成4个小文件。

split -l 3000 source.txt 

得到的4个小文件名称分别为xaa, xab, xac, xad。

3. 现在逐个创建名称符合要求的小文件,并往文件中存内容,像下面这样:

touch 1.source.txt
echo "#photo_file_name">1.source.txt
cat xaa>>1.source.txt

4. 最好能把冗余的文件删除,因此在完成第3步后执行rm xaa命令。

5. 主体已经有了,现在需要把它们拼起来形成一个shell脚本。

创建脚本文件split.sh并在vi中打开:

touch split.sh
chmod +x split.shvi split.sh

编辑split.sh,输入以下内容:

#!/bin/bash
# 1. 参数检查
if [ $# -ne 2 ]; then
    echo -e "wrong parameter\nUsage: $0 filename linecount";
    exit 1;
fi
# 2. 拆分文件
# 2.1 清掉可能的旧文件
rm -f x??
rm -f *.$1
# 2.2 执行拆分
split -l $2 $1
# 3. 遍历小文件
xfiles=$(ls x??)
index=1
for current_file in $xfiles; do
    new_file=$index.$1
    touch $new_file
    # 写入title和内容
    echo "#photo_file_name">$new_file
    cat $current_file>>$new_file
    # 删除冗余文件
    rm -f $current_file
    # 打印小文件摘要
    echo "~~~ $new_file";
    head -3 $new_file
    echo "......"
    tail -2 $new_file
    echo ""
    # 文件索引加1
    index=$(($index+1))
done

运行效果

[email protected]:~/demo $ ./split.sh source.txt 3000
~~~ 1.source.txt
#photo_file_name
201503200001.jpg
201503200002.jpg
......
201503202999.jpg
201503203000.jpg

~~~ 2.source.txt
#photo_file_name
201503203001.jpg
201503203002.jpg
......
201503205999.jpg
201503206000.jpg

~~~ 3.source.txt
#photo_file_name
201503206001.jpg
201503206002.jpg
......
201503208999.jpg
201503209000.jpg

~~~ 4.source.txt
#photo_file_name
201503209001.jpg
201503209002.jpg
......
201503209998.jpg
201503209999.jpg

[email protected]:~/demo $ ls
1.source.txt 2.source.txt 3.source.txt 4.source.txt source.txt   split.sh

小提示

1. shell脚本对空格敏感,赋值时不能留空格,比如xfiles = $(ls x??)就是错误的。

2. 变量的引用必须用$符号。

3. 当出现syntax error: unexpected end of file错误,请把注意力放在syntax error,大多数情况下是脚本语法错误。(当然也不排除文件格式的问题,可在vi中输入:set fileformat查看文件格式是否为unix。)

时间: 2024-12-25 23:23:41

使用shell脚本实现文本拆分的相关文章

shell脚本修改文本中匹配行之前的行的方法

原创文件,欢迎阅读,禁止转载. 例子中是把 finish 前一行的 "yes" 改成 "YES"有一个方法就是利用sed+awk一起来完成. [email protected]:~$ cat a.txt line 0 is yes line 1 is yes line 2 is yes line 3 is yes finish line this line is no this line is no #//用awk找到匹配行号算出要修改的行 [email prote

遍历文件并格式化输出文件(shell脚本实现)

[背景] 1.项目开发中,急需要根据资源路径res下的文件,生成如下三种格式的文件. 格式一: #define IDR_CEF_0001 101 #define IDR_CEF_0002 102 ... #define IDR_CEF_0122 222 格式二: {"about.html", IDR_CEF_0001}, {"addProbe.html", IDR_CEF_0002}, - {"img/helpimg/help17.PNG", I

什么是Shell?Shell脚本基础知识详细介绍

这篇文章主要介绍了什么是Shell?Shell脚本基础知识介绍,本文是一篇Shell脚本入门文章,在本文你可学到什么是Shell.有多少种Shell.一个Shell脚本代码实例,需要的朋友可以参考下 Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解释和执行用户输入的命令:作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支. 它虽然不是Linux系统核心

Shell脚本学习指南 [ 第三、四章 ] 查找与替换、文本处理工具

摘要:第三章讨论的是编写Shell脚本时经常用到的两个基本操作.第四章总共介绍了约30种处理文本文件的好用工具. 第三章 查找与替换 概括:本章讨论的是编写Shell脚本时经常用到的两个基本操作:文本查找.文本替换. 3.1  查找文本 如需从输入的数据文件中取出特定的文本行,主要的工具为grep程序.POSIX采用三种不同grep变体:grep.egrep.fgrep整合为单个版本,通过不同的选项,分别提供这三种行为模式.who | grep -F root上面使用-F选项,以查找固定字符串r

vim 文本编辑器、shell脚本:

vim 文本编辑器:    三种主要模式:        命令模式(默认):移动光标,剪切/粘贴文本        插入(编辑)模式:修改文本 输入i 进入插入模式        扩展模式:保存,退出等        快键           i: insert, 在光标所在处输入        I:在当前光标所在行的行首输入        a: append, 在光标所在处后面输入        A:在当前光标所在行的行尾输入        o: 在当前光标所在行的下方打开一个新行      

《Linux Shell脚本攻略》 笔记 第四章:高效文本处理

<Linux Shell脚本攻略> 笔记 第四章:高效文本处理 1.IP地址的正则表达式: [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} 2.grep用法 //在多级目录中对文本进行递归检索 [[email protected] program_test]# grep "yang" ./ -Rn ./test.txt:6:laoyang ./right.txt:1:1 yang man //忽略大小写匹配 [[email pr

6.shell脚本基础和grep文本处理工具企业应用

6.1shell脚本基础-bash变量和逻辑运行 bash特性及bash脚本编程初步 终端:附着在终端接口程序: GUI:KDE,GNome,Xfce CLI:/etc/shells bash的特性 命令行展开:~,{} 命令别名:alias,unalias 命令历史: history 文件名通配:glob 快捷键:Ctrl+a, e, u, k, l 命令补全: $PATH 路径补全: bash特性之:命令hash 缓存此前命令的查找结构:key-vlaue key:搜索值 value:值 h

第三周、文本处理工具、shell脚本编程

文本处理工具 1.cut -d指定分隔符.比如-d: -d' ' -f指定取第几列.比如-f1,3 --output-delimiter指定显示的分隔符 tr -s压缩 -d删除 -c除了 2.使用tr和cut取磁盘的百分比 [[email protected] data]# df -h | tr -s ' ' | cut -d' ' -f5 | tr -dc '[0-9]\n' 0 0 5 0 32 67 32 0 3.取IP [[email protected] data]# ifconfi

shell脚本--文本处理以及编程原理

一.文本处理工具 wc命令 wc(Word count)用于统计文本文件中的字符个数 15是行数  78是字符个数   805是文件大小(字节)[1字节等于8比特] 2.参数:-l(统计行数).-w(统计单词数).-c(统计字节数) cut(切片)命令 1.指定分隔符,切割文件 2.常见参数:-d(指定分割符).-f(指定提取哪一列).--output-delimiter=‘’(将输出的分隔符,替换为自己想用的分隔符) 示例:cut -d” ” -f1 /etc/fstab(取第一列) cut