转自:http://www.2cto.com/os/201203/124813.html
切割合并文件在linux下用split和cat就可以完成。下面举些实例进行说明。
1.文件切割
文件切割模式分为两种:
文本文件
二进制模式。
1.1文本模式
文本模式只适用于文本文件,用这种模式切割后的每个文件都是可读的。文本模式又分为两种:
按最大文件大小切割;
按文本行数切割。
1.1.1最大文件大小切割
split -C 5k duanxin split
将文本文件duanxin按每块最大5k的大小进行切割,不打碎行。输出文件名类似splitaa, splitab……
split -b 5k duanxin split
每个分块(当然,最后一个不保证)大小都是5k,可能会打碎行。
1.1.2 按文本行数切割
split -l 100 duanxin split
每个分块100行,不考虑大小。日志分析时应该有用。
1.2 二进制模式
split -b 5k duanxin split
每个分块(当然,最后一个不保证)大小都是5k,基本不可读。任何类型文件都可以用这种切割模式。
2.文件合并
cat split* >newduanxin
不管用什么方式切割,合并方法不变。
3.其它
split可以用-a选项指定输出文件名的长度。如
split -l 100 -a 3 duanxin split
则输出文件出类似于splitaaa,splitaab。不指定时默认为2。
用-b或-C指定分块大小时,可用的单位有,b for 512bytes, k for 1Kbytes, m for 1 Megbytes.
split 参数:
-a, --suffix-length=N 指定输出文件名的后缀,默认为2个
-b, --bytes=SIZE 指定输出文件的字节数
-C, --line-bytes=SIZE 每一输出档中,单行的最大 byte 数
-d, --numeric-suffixes 使用数字代替字母做后缀
-l, --lines=NUMBER NUMBER 值为每一输出档的列数大小
主要内容:sort命令、uniq命令、join命令、cut命令、paste命令、split命令、tr命令、tar命令
sort 命令:
Linux的sort命令就是一种对
文件排序的工具,sort命令的功能十分强大,是Shell脚本编程时常用的文件排序工具;
sort命令与awk一样,将
文件看作
记录和域进行处理,默认的域分隔符是空格符,sort命令的格式为:
sort [选项] [输入文件]
选项 意义
-c 测试文件是否已经被排序
complete
-k 指定排序的域
k1
k2nr 往后加命令即可
-m 合并两个已排序的文件
merge
-n 根据数字大小进行排序
number
-o [输出文件] 将输出写到指定的文件,相当于将输出重定向到指定文件
open
-r 将排序结果逆向
reverse
-t 改变域分隔符
eg:-t:
一般最新定义
-u 去除结果中的重复行
unique
-u
uniq 命令
uniq命令用于去除文本文件中的重复行,这类似于sort命令的-u选项
sort -u命令时,所有重复记录都被去掉
uniq命令去除的重复行必须是
连续重复出现的行
,
中间不能夹杂任何其他文本行
选项 意义
-c 打印每行在文本中重复出现的次数
count
-d 只显示有重复的记录,每个重复记录只出现一次
-u 只显示没有重复的记录
unique
join 命令
join---
实现两个文件中记录的连接操作
,连接操作将两个文件中具有相同域的记录选择出来,再将这些记录所有的域放到一行(包含来自两个文件的所有域)
join [选项] 文件1 文件2
选项 意义
-a1或-a2 除了显示以共同域进行连接的结果外,-a1表示还显示第1个文件中没有共同域的记录,-a2则表示显示第2个文件中没有共同域的记录
-i 比较域内容时,忽略大小写差异
-o 设置结果显示的格式
-t 改变域分隔符
-v1或-v2
跟-a选项类似,但是,不显示以共同域进行连接的结果
-1和-2 -1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
当两个文件进行连接时,文件1中的记录可能在文件2中找不到共同域,反过来,文件2中也可能存这
在样的记录,join命令的结果默认是不显示这些未进行连接的记录的
-a和-v选项就是用于显示这些未进行连接的记录,-a1和-v1指显示文件1中的未连接记录,而-a2和-v2指显示文件2中的未连接记录
-a和-v选项的区别在于:
-a选项显示以共同域进行连接的结果,而
-v选项则不显示这些记录
当两个文件进行连接时,文件1中的记录可能在文件2中找不到共同域,反过来,文件2中也可能存在这样的记录,join命令的结果默认是不显示这些未进行连接的记录的
-a和-v选项就是用于显示这些未进行连接的记录,-a1和-v1指显示文件1中的未连接记录,而-a2和-v2指显示文件2中的未连接记录
-a和-v选项的区别在于:-a选项显示以共同域进行连接的结果,而-v选项则不显示这些记录
join命令默认显示连接记录在两个文件中的所有域,而且是按顺序来显示的。-o选项用于改变结果显示的格式
join命令
默认比较文件1和文件2的
第1域,如果我们需要通过其他域进行连接,就需要使用
-1和-2选项,-1用于设置文件1用于连接的域,-2用于设置文件2用于连接的域
join -t: -i -1 3 -2 1 TEACHER1.db TEACHER_HOBBY.db
cut 命令
cut命令用于从标准输入或文本文件中按域或行提取文本
选项 意义
-c 指定提取的字符数,或字符范围
count
-f 指定提取的域数,或域范围
field
-d 改变域分隔符
cut -c1-5 TEACHER.db
cut -d: -f1,4 TEACHER.db
cut -d: -f1-3 TEACHER.db
paste 命令
paste命令用于将文本文件或标准输出中的内容
粘贴到新的文件,它可以将来自于不同文件的数据粘贴到一起,形成新的文件
paste [选项] 文件1 文件2
选项 意义
-d 默认域分隔符是空格或Tab键,设置新的域分隔符
-s 将每个文件粘贴成一行
- 从标准输入中读取数据
paste命令的“-”选项比较特殊,当paste命令从标准输入中读取数据时,“-”选项才起作用
eg:[root@jselab shell-book]#
ls | paste -d" " - - - - -
#从标准输入读取数据
anotherres.sh array_eval2.sh colon.sh example execerr.sh
#每行显示5个文件名
execin.sh exec.sh FILE1 FILE2 forever.sh
hfile loggg loggg1 loopalias.sh matrix.sh
newfile nokillme.sh part1 part2 part3
parttotal refor.sh reif.sh selfkill.sh sleep10.sh
sleep55.sh stack.sh subsenv.sh subsep.sh subsig.sh
subsparallel.sh subspipe.sh subsvar.sh TEACHER.db test.sh
testvar.sh traploop.sh
split 命令
split命令用于将大文件切割成小文件,split命令可以按照文件的行数、字节数切割文件,并能在输出的多个小文件中自动加上编号
split [选项] 待切割的大文件输出的小文件
选项 意义
-或-l 此两个选项等价,都用于指定切割成小文件的行数
-b 指定切割成小文件的字节
-C 与-b选项类似,但是,切割时尽量维持每行的完整性
tr 命令
tr命令实现
字符转换功能,其功能类似于
sed命令,但是,tr命令比sed命令简单
tr命令能实现的功能,sed命令都可以实现
tr [选项] 字符串1 字符串2 <输入文件
tr命令要么将
输入文件重定向到标准输入,要么从
管道读入数据,记住tr命令的输入文件之前需要加上“
<”符号
选项 意义
-c 选定字符串1中字符集的
补集,即反选字符串1中的字符集
-d 删除字符串1中出现的所有字符
-s 删除所有
重复出现的字符序列,只保留一个
tr命令的-d选项只需跟一个字符串,它表示删除字符串中出现的所有字符
tr -d A-Z <AREACODE .db
tr命令的-s选项用于删除所有重复出现的字符序列,只保留一个,即将重复出现的字符串压缩为一个字符spress
tr -s "[a-z],[A-Z]" <AREACODE.db
tr命令也可以加上字符串1和字符串2,将字符串1用字符串2来
替换
tr "[a-z]" "[A-Z]" <AREACODE
tr命令的-c选项用于选定字符串1中字符集的补集,即反选字符串1中的字符集contract
tr -cs "[a-z][A-Z]" "[\012*]" <AR
tar 命令
tar命令是Linux的
归档命令
,tar命令可以将文件或目录打成一个
包
tar [选项] 文件名或目录名
选项 意义
-c 创建新的包
create
-r 为包添加新的文件
refresh
-t 列出包内容
-u 更新包中的文件,若包中无此文件,则将该文件添加到包中
-x 解压缩文件
-f 使用压缩文件或设备,该选项通常是必选的
file
-v 详细报告tar处理文件的信息
view
-z 用gzip压缩和解压缩文件,若加上此选项创建压缩包,
gzip
那么解压缩时也需要加上此选项
-f是必选选项,-c选项用于创建包
tar -cf db.all *.db
-r选项可将文件添加到包
-t选项用于查看包的内容
tar -tf db.all
tar命令的另一重要功能就是解压缩,以下两种解压缩命令足以满足一般应用要求:
tar -xvf 压缩包名称
#解压非gzip格式的压缩包
tar -zxvf 压缩包名称
#解压gzip格式的压缩包
tar -zxvf db.all.gz
gzip命令是Linux系统中常用的
压缩工具,它可以对tar命令创建的
包进行压缩,但是,gzip所生成的压缩包使用
tar -zxvf命令就可解压缩